It is unlikely that you experience timing problems but it is possible that micros are busy doing something else.
If possible use command-response protocol and/or interrupts. For example, in 51core the serial interrupt is of the lowest priority but you can set priority bit and make it high.
A 11,059 crystal oscillator shouldn't have any error (error rate=0), as long as you correctly setup the baudrate in your micro, using correct constant values for the timer.
Are you sure you had made appropriate changes in your flash program ?
If there is no problem with the software, perhaps you should check the quality of your hardware. You should never underestimate NOISE! Using a better PCB does help
Make sure that you are set at the same baud rate on both ends. Look at your timing in your code and make sure that you are respecting it. Before you transmit make sure that the receiving end is not busy and is ready to receive more data (use interrupts or polling routine services). On the RX side make sure that all of your data has been received before you start doing something with it.
You may think that these are basic steps and suggestions but major part of the time they are the source of most of the problems with data communication.
After you've checked and made sure that you are respecting all of this, and you are still facing the same problems just blame it on the hardware