Спасибо за совет, проверил программой portmon, правда по началу она меня озадачила(из 30 отправленных байт только 21 показывала), в целом она помогла выловить ошибку компонента SerialPort, возникала при обращении к состоянию флага DTR, видимо драйвер тех карточек что-то левое возвращал.
Пишу свой класс работы с портом, осталость только асинхронное чтение организовать. Как я понял WaitCommEvent дает возможность сделать чтение событийным. Подскажите как это должно выглядеть на C#.