CAN bus filtering specified data

Try changing

for(byte i = 0; i<len; i){

to

for(byte i = 0; i<len; i++){

for a start.

Its possible you are reading the bus too often but I dont know enough about the CAN_INT0 signal to be sure- it may be that you only need to read a message when the pin changes state, not whenever its LOW.