
That won't work as-is because the built in error squiggles only update when the Document.ParseData changes at the end of a parsing operation. But here you are asynchronously updating the parse data at some later time after the above already occurred.
If you could run the logic currently in the BackgroundWorker synchronously from within your IParser.Parse method, then the error results would all come though ok without any additional effort.
But you've said you want to offload that work in a delayed way. In you must do that, you could probably set the document.ParseData to a new changed value (maybe a clone of your original parse data but with additional info) after your secondary parse occurs, and that would tell the ParseErrorTagger to refresh.
All that being said, I'm not sure I like the whole concept of this async parse within an async parse. What you will end up with is parse data after edits that first has some data, but not the secondary parser's results. And then that secondary parse data result drops in again later, only to be replaced after another edit by the simpler parse data results and so on. It seems like it opens the door to problems with consistency.