Here are my hunches for what the problem is: you're initializing the UART wrong (it's been a while and I forget the details), you're conflicting with something else that's using the serial port, or you're registering your ISR wrong.
To test whether your UART initialization is correct, you can try removing Linux from the mix. It's pretty simple to create a binary that GRUB can boot (Google: multiboot specification), and that way you can test out your code in isolation. You'll want to use polling rather than ISRs to wait for data, and write directly into the VGA buffer (it's on the even bytes starting at 0xB8000) to print your data to screen.
You also might want to try running this through Bochs, because it can give you hardware-level logs about what's going on. Are bytes actually being received? Is the IRQ actually being raised? That sort of thing.
If that works, then your problem is with Linux itself, and I can't be much help there. I suggest looking through the source for other drivers that register IRQ handlers, or asking the linux-kernel mailing list.
Best of luck.