with a quick look I can see these issues


from the data sheet

For enabled interrupt-on-change pins, the present
value is compared with the old value latched on the last
read of PORTB to determine which bits have changed
or mismatch the old value. The ‘mismatch’ outputs are
OR’d together to set the PORTB Change Interrupt flag
bit (RABIF) in the INTCON register (Register 2-3).
This interrupt can wake the device from Sleep. The user,
in the Interrupt Service Routine, clears the interrupt by:
a) Any read or write of PORTB. This will end the
mismatch condition
.
b) Clear the flag bit RABIF.
A mismatch condition will continue to set flag bit RABIF.
Reading or writing PORTB will end the mismatch
condition and allow flag bit RABIF to be cleared. The latch
holding the last read value is not affected by a MCLR nor
Brown-out Reset. After these Resets, the RABIF flag will
continue to be set if a mismatch is present.
since you are continually reading portb in your main loop the mismatched condition is probably being masked.

and secondly according to the manual
Code:
 DISABLE  should go here 
ISR:
    DISABLE    not here    
        ' TMR0
        IF INTCON.2 = 1 THEN
            INTCON.2 = 0
            TICK_INT:
                Ticks = Ticks + 1
                IF Ticks < 61 THEN DO_NOTHING
                Ticks = 0
                TOGGLE TMR0_LED
            DO_NOTHING:
        ENDIF
    
        ' IOCB
        IF INTCON.0 = 1 THEN
            INTCON.0 = 0
            New_bits = PORTB
            IF (New_bits.6 <> Old_bits.6) THEN 'PORTB.6 has changed
                TOGGLE IOCB_LED
            ENDIF
            Old_bits = New_bits
        ENDIF    

    RESUME
    ENABLE
END