В приведённом коде SetCommMask вызывается с паарметром EV_RXCHAR|EV_TXEMPTY. Но пробовал вызыать просто с EV_RXCHAR. Прикол в том, что даже в этом случае когда я дожидаюсь события (именно дожидаюсь, WaitForSingleObject==WAIT_OBJECT_0),
GetOverlappedResult возвращает код события 0x00000004, т. е. EV_TXEMPTY! Это при том, что я вызывал SetCommMask(EV_RXCHAR)!!!

Ну и хрень, извиняюсь за выражение!!!