First of all, ORing CANTFLG with something is wrong!
CAN0TFLG|=CAN0TFLG_TXE0_MASK;
^^ this clears not only TXE0 bit, but also TXE1 and TXE0 if they are set! In other words if TX1 and TX2 buffers are empty, then red line with send those empty buffers.
CAN0TFLG = CAN0TFLG_TXE0_MASK;
^^ this will send only buffer TX0.
I don't see where are you filling TX buffers. I hope you fill TX buffer only when TXE0 bit is set. Is it so? Because your code looks bit weird: 1) you send TX0 buffer, 2) you do something to Fuel_cons, 3) you send TX0 buffer again, though I don't see where you are waiting for TX0 buffer to become empty (while TXE0 is clear), 4) you do something to EngHr