If you're using interrupts on either end then you shouldn't use SEROUT/SERIN as interrupts will upset the timing.
You should use the hardware HSEROUT/HSERIN routines, but then you will have to use the dedicated UART IO pins.

Also, you would be better off running the receiving end with a faster osc setting... try 32MHz instead of 16.