Problems with CDC Device Class
The PIC UART can be picky.  Did you remember to check the Frame Overrun (OERR) bit?  The PIC will be unable to receive UART communications until the OERR is cleared.

EDIT: I was also thinking...perhaps you could try a sort of loopback?  That is, cut the UART out of the loop, and when the PC sends anything over USB, just send it straight back.  This would tell you whether the issue is with the UART or the USB side of the PIC.