Tone check is implemented as triggering when the cursor focus leaves a branch node (generally a paragraph). It runs itself async, and then if a tone check is returned it shows itself and forces itself into being the selected check. (This is the only way to have a check selected without your cursor being contained within its matched text range.)
This is okay in the simple case, but it causes confusion if there's any other checks in the document. E.g. if you left the place you were typing by clicking another check and starting to interact with it, you'd be forcibly evicted from that check.
It also interfered with suggestion-mode (T399612) because the initial run of synchronous checks came in and were displayed, and then were overridden 2-5 seconds later by the full document's worth of tone checks getting dropped on top of them. This is worse than the above, because doing 30 tone checks at once is a bit slower.