No se de donde sacas que TMR2IF esta siempre activo, a mi en la simulacion se me activa solo cuando desborda TIMER2, lo que si activo es el bit INTCON,PEIE, en la interrupcion debes chequear los dos FLAGS de interrupcion, tambien deberias hacer copias de respaldo de W y STATUS y no borrar registros enteros solo los FLAGS que quieras borrar en cada momento.
; Guardado de registro W y STATUS.-
Inicio_ISR
movwf W_Temp ; Copiamos W a un registro Temporario.-
swapf STATUS, W ; Invertimos los nibles del registro STATUS.-
movwf STATUS_Temp ; Guardamos STATUS en un registro temporal.-
btfsc PIR1,TMR2IF
goto interrupcion_tiemer
btfsc INTCON,RBIF
goto interrupcion_PORTB
goto Fin_ISR ; se sale de la interrupcion, falsa alarma
;aqui las rutinas de ambas interrupciones
; Restauramos los valores de W y STATUS.-
Fin_ISR
swapf STATUS_Temp,W ; Invertimos lo nibles de STATUS_Temp.-
movwf STATUS
swapf W_Temp, f ; Invertimos los nibles y lo guardamos en el mismo registro.-
swapf W_Temp,W ; Invertimos los nibles nuevamente y lo guardamos en W.-
retfie ; Salimos de interrupción.-
;..........................................
Quedaria asi mas o menos. Tampoco debes llamar tu a la interrupcion.