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 you should read it, ie. DISCARD = RCREG

/Henrik.