Hi PICpocket ... good name

I think the biggest problem is the IF block ...
Code:
IF counts = 10 then
    ; counts time here
ELSE
    GOTO MAIN
ENDIF

T1handler:
 ...
When counts gets to 10, it adds to the time, then bypasses the GOTO Main and falls into the interrupt handler which has nowhere to return to.

Also, counts wasn't initialized to 0, so it may have to go all the way to 255 then rollover to 0, before making it to ten. Then once it gets to 10, you'll need to set counts to 0, or it will count all the way up again.

The timekeeping part would be better inside the interrupt handler. Depending on what else you add to the Main loop, it could lose time.

Any Software timed commands like DEBUG will be disturbed by interrupts.
To send data via RS232, you should use the USART with HSEROUT.
Or, you can disable the interrupts when sending data, but it can mess up the time if your not careful.

To disable the interrupt ...
@ INT_DISABLE TMR1_INT
To enable the int ...
@ INT_ENABLE TMR1_INT

Which brings us to the IR signal (code not included).
Trying to read that using PAUSEs or similar methods won't work reliably because the timing will be disrupted by the interrupts. You can probably use another timer for the IR reception.

hth,