I presume something else is synchronizing audio/video and that it should check for corrupted frames.
Kodi is responsible for sync and yeah, I think code isn't optimal.
I assume for SW decoding (which works fine) it is just presenting raw video frames to V4L2 (since it is already decoded).
V4L2 is just for decoding and possibly deinterlacing. Rendering is done using either DRM planes (default) or GPU, but you're right in principle.
As it stands now, the workaround me is to just drop MPEG2 in the driver capabilities, and it takes about 50% CPU on all cores for a full 1080i video which is not a big deal.
Maybe an option can be added to disable HW decoding for specific codecs on the fly? I think that would be best.