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.