Most probably it is not an issue of missing messages but issue of missing interrupts. I guess the application software destroys the interrupt flags by read-modify-write sequences.
Instead of doing read-modify-write of IFLAG1 register (as in MQX flexcan demo) do a simple write, as you want to clear just one bit at a time, when in the isr:
change from: can_reg_ptr->IFLAG1 |= tmp_reg;
change to: can_reg_ptr->IFLAG1 = tmp_reg;