I'm at work without my development computer or cameras right now but this looks like something interesting:
/* max resolution for each video mode (trial and error) */
/* it's usually possible to push the numbers a few pixels further,
* at the risk of corrupted frames */
static int max_resolutions[NUM_CROP_PRESETS][5] = {
/* 24p 25p 30p 50p 60p */
[CROP_PRESET_3X_TALL] = { 1920, 1728, 1536, 960, 800 },
[CROP_PRESET_3x3_1X] = { 1290, 1290, 1290, 960, 800 },
[CROP_PRESET_3x3_1X_48p] = { 1290, 1290, 1290, 1080, 1040 }, /* 1080p45/48 */
[CROP_PRESET_3K] = { 1920, 1728, 1504, 760, 680 },
[CROP_PRESET_UHD] = { 1536, 1472, 1120, 640, 540 },
[CROP_PRESET_4K_HFPS] = { 3072, 3072, 2500, 1440, 1200 },
[CROP_PRESET_FULLRES_LV] = { 3870, 3870, 3870, 3870, 3870 },
};
Secifically, the CROP_PRESET_3x3_1X on the EOSM, 100D, 700D, 650D is not 800 vertically in mv720 mode. The full raw buffer isn't even that big. As far as I can tell there's no other place in the code that sets max_resolutions.
On the EOSM there are 28 black pixels at the top of the frame and the image is 724 pixels high. I couldn't find an EOSM mv720 full raw buffer in my flickr library but I have one for the 100D that Danne shared with me.

It is 727 pixels high and the out of bounds area takes up 28 pixels off the top (sound familiar?) so the maximum possible vertical resolution would be 699 pixels, maybe slightly less, so that 800 pixel max resolution may be fine for the 5D3 but it doesn't apply to these other cameras.