*murmel,murmel*
Tscha, Ohne Gewähr (passieren kann aber nix):
NACH der $BAUD= anweisung setze mal andere Werte in das UBRR Register
In deinem Fall (Quartz & 38k4 Baud) sollte er ja "23" reinschreiben (ev. mit Simulator überprüfen --> Register display), kann aber auch "47" sein

Schreib ev. einfach mal
UBRR = 24 (oder höher), dann sollte er langsamer werden.

Ist nur ein Versuch, und kann nur helfen, wenn du mit dem QUartz Pech hast und er etwas höher schwingt von wegen Toleranz.

Dein Programm oben ist ja recht übersichtlich, da kann ja nix falsch sein.
Ich weiss nicht, ob der MAX232 bei irgendwelchen Fehlern sowas produzieren könnte, glaub' eher nicht.

Very strange, geht alles ein wenig in ein esoterisches Bereich, da ist dann ALLES möglich

EDIT: sollte das wirklich was helfen, dann solltest du einen anderen Quartz versuchen