The only time I have seen the UART send / receive funny characters is if the baud rate was wrong, but I would have though that the TX would be messed up too, so I would try the code above with the internal oscillator, I see you mentioned the PICDEM2 board, are you using the built in MAX232 chip for this? I presume it is wired to RC6/7 for the hardware UART?
You may also, as standard get 1 funny character through a terminal (maybe have to view the HEX representation) of the UART Init.
There isn't anything special to a simple UART rx / tx, my demo board consists of a 16F887, MAX232, couple of caps, 10k resistor on the MCLR to +5v, DB9 Connector for the serial, and a bit of wire wrap.
I use the internal 4MHz OSC at 9600bps and it works fine. So try the internal OSC, if not I would check the MAX232 chip is working correctly, you could try using a lower baud rate also, like 2400, 1200 etc.