The empirical program:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(8,9);
void setup() {
Serial.begin(2400);
mySerial.begin(2400);
}
void loop() {
if (mySerial.available()) Serial.write((char)mySerial.read());
}
exhibits the same behaviour using HyperTerminal / SoftwareSerial (I tried several input pins on both Uno / Leonardo), but is fine with a hardware serial port.
I tried using a Win7 machine (with hyperterm.exe / hyperterm.dll copied from WinXP) as well as a standard Windows XP machine.
Using PuTTY, there is no problem.
If the same character is repeated three times, the third character is the ASCII value +128, and then subsequent characters alternate between correct and +128.