viz MSDN:
"The DataReceived event is not guaranteed to be raised for every byte received. Use the BytesToRead property to determine how much data is left to be read in the buffer."
Takže pokud odešleš požadavek a hned na něj očekáváš odpověď, tak tohle asi nejde použít.
Tohle bych asi řešil tak že bych tomu seriovemu portu nastavil třeba 5s timeout.
A pak bych dotaz-odpověď vyrobil takto:
serialPort.ReadTimeout = 5000;
serialPort.Write(Vyslání tvého dotazu);
try{
int odpoved = serialPort.ReadByte();
//zpracování odpovědi.
} catch (TimeoutException ex) {//došlo k timeoutu, dané zařízení neodpovídá}