Io un paio di settimane fa sono impazzito tre ore prima di capire che nel buffer della porta seriale c'erano dati da leggere, ma la richiesta della lunghezza dei dati nel buffer era zero.
Prova con:
while (1)
{
data += Convert.ToChar(serialPort.ReadByte());
if serialPort.eof break;
}
o qualcosa del genere (non so come sia fatto quel serialport)