Hi,
I never use ON INTERRUPT myself and I haven't looked very closely at your code yet but the first thing that pops out is RCREG = DISCARD... Why do you write to RCREG?

If you want to flush it...