Hi,
It is more likely that your code changes have resulted in slightly different optimization by the Compiler, rather than this behaviour being purely a result of the data bank being used - though the data being in a different bank may offer different optimization options to the compiler, again resulting in the inadvertent avoidance of the incorrect behaviour.
You said your code was hitting an exception - what exception were you encountering? Examining the HWERRCAUSE and EXCAUSE registers will give an indication of the cause, and the RETX register gives the location of the instruction that generated the exception.
You mentioned that numsamples is declared as volatile - are any of the other variables that are accessed by the interrupt routine (tx_fub, rx_buf, current_channel_no) also declared as volatile?
Regards,
Craig.