That's the thing...you tested for an output, not an input. Have you tried something really silly like reloading PBP and MPLAB? Ya never know there either.
As far as the '452 goes, you might want to switch over to a '4620, twice the code space, lot more ram, bunch more options, same price, almost 100% firmware compatible to the '452, and it is pin compatible with the '452. When I built my player, I started off with a 16F877, switched to a '452, then a '4620, all on the same PCB, and very little firmware change during the process.
As far as the program goes, I'm not saying that what you wrote is crap...far from it. I can easily follow everything you want to do. I'm just thinking that a lot of what you wrote can be rewritten a lot smaller and more compact. If I get some time over this long weekend, I'll take a deeper look at the code and see what I can come up with. One thing you might want to do, and I don't know if it'll have anything to do with anything or fix anything, is move some of the blocks around...
1-CONFIGs
2-DEFINEs
3-Variable assignments
4-Jump over everything to the main loop
5-Interrupt code and subroutines (don't forget the disable)
6-Subroutines (don't forget the enable)
7-Main Loop
Bookmarks