Да уж, "элегантное" решение. А почему Sleep(500)? А не, например, 502, или 497? От фонаря? (упрёк не топикастеру, а источнику)
Кстати, ошибки, связанные с подобными "решениями" проблемы, трудней всего выявлять. Как следствие получается: у меня работает, а у меня нет.
Так что это не "решение", а скорее workaround, например, для сиюминутной проверки.
Я бы даже не полагался на внутренний буфер SerialPort, а сделал бы свой FIFO, в который бы помещалось ВСЁ, что приходит из COM-порта и инициировал ф-цю обработки FIFO буфера:
private void AcceptData2(object sender, SerialDataReceivedEventArgs e)
{
int cnt = comport.BytesToRead;
byte[] inBuffer = new byte[cnt];
comport.Read(inBuffer, 0, cnt);
_myFIFO.Push(inBuffer, cnt);
//-- Вызов ф-ции обработки _myFIFO
...
}