assuming the 2 machines communicating over the described link have a stable locked clock and assumed 'sterile' env (no external source of energy) - then u should experience no errors even at much higher rates.
in case yr env is noisy - u should use a covered twisted 3 lines (RX, TX, GND)
it is assumed that the RS-232 ports are served by ISRs rather than by polling sw
there is another mean u may consider if yr HW supports and u can configure the low level driver to use - buffered ports. thus, if the processor doesn't have the opportunity to respond on time (if interrupt fashion served - there may be higher priority interrupts that will employ the processor in a spike, or if polling fashion served - then higher priorithy thread may inhibit the serving sw from having the processor on time to fetch received data). buffered ports will allow such cases be handled w/o a lose of data).
in addition to CheckSum and re-transmit mechanism u should implement in the data-link layer (to detect and request retransmission) - as mentioned by previous responders, i would recommend to implement another mechanism - each remote manage errors statistics - once a treshold is crossed (#of-errors per #seconds) then a remote will request the other end to lower the rate (e.g. 38400 => 19200) (this is fully transparent to application).