If it's anything like the USB Serial library, anything in the main thread that is in a DoEvents() blocks all processing of events, even if they are generated from a separate thread.
The solution to this particular problem is to use a timer to look for data, rather than solely rely on events.
I don't have example code as the above description is my version of what was described to me, but I haven't been able to get my project to work yet.
Don't know if that helps, but good luck.