In the LPC5461X 2.5.0 SDK there is a flaw in the MCAN routine MCAN_TransferHandleIRQ. It will work fine if there is a single IRQ flag set. If there are multiple IRQ flags set the first will be handled by the if-else code in the do loop and then ALL IRQ flags will be cleared with the MCAN_ClearStatusFlag call in the loop. So if there are TX and RX IRQ flags the TX will be serviced, the IRQ flags cleared and the RX flag never dealt with.
The can.c IRQ code in the old LPC driver seems to be better written (haven't tested it yet though).
FYI: Couldn't find a way to post this to NXP support directly so I posed this here.