I suspect it's your int handler.

btfsc PIR1,5
goto KeyHit ; <-- you never reset timer0 int flag before exiting

bcf INTCON,2 ; (skips over this) Clear the interrupt flag

That may be a problem once retfie re-enables global interrupts.

And if you have your USART receive interrupt enabled, you're not clearing the
receive interrupt with BCF PIR1,5. You have to read whatever is in the USART
receive buffer to clear this flag bit.

Have a look at the 18F series interrupt handler in this example;
http://www.microengineeringlabs.com/...p/serbufAx.bas