Откуда при поступлении данных по com-порту берётся двойное срабатывание WaitCommEvent??
Программа ожидает события EV_RXCHAR. Событие срабатывает, читаем принятые данные, переходим на ожидание события (и ту самое интересное!!!) и функция сразу же возвращает управление с данным событием. Смотрим количество поступивших данных, и оно равно 0!!!