Best guess: this must be 3x3 readout with line *and* column skipping!
Here's a test on the resolution chart (roughly
this, but updated for movie crop mode, where IIRC you can't just toggle between x1 and x5 zoom freely). This test will take 2 images, one in the tested video mode and another in x5 zoom, with no absolutely camera or subject motion between them. That will reveal the exact pixel binning mode. Tested on 5D3 (iso-research branch, but should work on any recent experimental build).
-- Pixel binning test
-- Save this file as bintest.lua or similar.
--[[
Requirements:
- lua.mo (of course)
- silent.mo
- test subject: resolution chart, perfectly focused and with good light
- camera standing still (important) on a flat surface
- absolutely NO camera or subject movement during the test (important!)
--]]
menu.close()
sleep(1)
display.notify_box("Preparing...")
sleep(1)
assert(camera.mode == MODE.MOVIE)
assert(lv.running)
menu.set("Silent Picture", "Silent Mode", "Simple")
menu.set("Shoot", "Silent Picture", "Simple, DNG")
menu.set("Movie", "RAW video", "OFF") -- just in case (no need to load mlv_rec or mlv_lite)
menu.set("Movie", "RAW video (MLV)", "OFF") -- but if you do, let's turn them off
sleep(5)
-- first test image in 1080p 3x3 (derived from Canon's crop mode)
display.notify_box("First test image...")
menu.set("Movie", "Movie crop mode", "ON")
menu.set("Movie", "Crop mode", "mv1080p MCM rewire 16:9")
sleep(1)
-- refresh LiveView
camera.gui.menu = true
sleep(1)
assert(not lv.running)
camera.gui.menu = false
sleep(1)
assert(lv.running)
sleep(2)
-- take a silent picture
key.press(KEY.HALFSHUTTER)
sleep(1)
key.press(KEY.UNPRESS_HALFSHUTTER)
sleep(5)
-- now turn off crop mode and enter x5 zoom
display.notify_box("Second test image...")
menu.set("Movie", "Crop mode", "OFF")
menu.set("Movie", "Movie crop mode", "OFF")
sleep(1)
-- refresh LiveView once again, just in case
camera.gui.menu = true
sleep(1)
assert(not lv.running)
camera.gui.menu = false
sleep(1)
assert(lv.running)
lv.zoom = 5
sleep(20) -- large delay to "fix" vertical stripes
key.press(KEY.HALFSHUTTER)
sleep(1)
key.press(KEY.UNPRESS_HALFSHUTTER)
sleep(5)
-- cleanup
menu.set("Shoot", "Silent Picture", "OFF")
lv.zoom = 1
display.notify_box("Finished.")
edit: after writing and testing this script, I've just realized it would be enough to take one test picture with our crop mode enabled (i.e. 1080p 3x3 derived from it), and another one with our crop mode disabled (i.e. 1:1 readout). In both cases, Canon's movie crop mode would be active.
BTW - if my hypothesis is true, the fix is somewhere in the
CMOS registers. You are lucky - the search space is very small

Tweaking skip offsets will do absolutely nothing to fix the image aliasing. These offsets will specify how to interpret the raw data in post (i.e. how many border pixels to throw away). The effect of that would be only in the alignment of focus pixel maps, but that won't help with the aliasing issue in any way.