Serial.read() bug

It's certainly possible that the problem is in the Arduino software. Can you give us more details about the communication? Are you seeing a problem when you send just the three characters "555"? Do you see 55ë every time you send those characters? What if you send other three character strings? Longer or shorter strings?

I've seen this sort of problem with the software serial on Arduino, but the hardware serial seems to reasonably reliable, so if you get an incorrect character when you only send 3 bytes, I suspect it has something to do with the setup (not that it's wrong, but just that it's making different assumptions than the Arduino software does). Is it possible there's a mismatch between the serial settings that the Arduino is using (8-bit, no parity, one stop bit, no flow control) and those that HyperTerminal is using?