here is what I think is happening:
When the INT is called, the state of the BSR is unknown. If the main program is doing something that requires bsr to be other then 0, when you enter the ISR you can't manipulate the things in the ISR because the wrong bank is selected.

When you added the BCF BSR,0 - This almost fixed it but not quite. When it stays in the ISR that is because you can't clear the flag (acting on wrong reg, NOT PIR) so the INT just fires forever. My guess is when you think the main is running without INT, that may be not true, it may be that you just aren't toggling the output so you think the ISR has not fired.

The easiest way I know of to troubleshoot this is using MPLAB SIM inside of MPLAB. put a breakpoint at the first line of the ISR, then when it fires you can single step through while watching reg's like port b and even better BSR!