From firmware revision b208f8c onwards, with kernel_old=1 and arm_64bit=1, kernels are getting loaded at physical address 0 as required, but are also getting overlaid at 0x80000. Control passes to the ARM and execution begins at address 0x0, but if the kernel is larger than 512KB it is corrupted due to the second copy which is overlaid into RAM at 0x80000.
I ran a full git bisection of the firmware, to determine that this is the first commit where the issue happens, and can confirm it is still happening on the current tip of the master branch.