I have fuzzy memory (git history will confirm) but I think we added canupdate.sh for LE v8.0. I know it was not part of the OpenELEC codebase that we forked from or the initial LE v7.0 release. The update process is controlled by the older image (not the newer) so this means there is no check against canupdate.sh when updating from older OE or LE v7.0 images. It is also not an upgrade script or place to effect complex changes. It is a deliberately simple check to see whether the update should proceed or not. The calling update script simply passes $PROJECT.$ARCH so crossgrades between arm and aarch64 of the same $PROJECT can be allowed and wrong $ARCH or wrong $PROJECT updates prevented. If the canupdate.sh script exits with "exit 0" update proceeds and if it exits with "exit1" update is blocked.
In the current PR that I submitted I'm simply checking "if [ "$1" = "iMX6.arm" ]; then" because all "legacy" images are "imx6.arm" (not iMX6.arm) so we can fail the update. I've included an "echo" message but In hindsight (thinking about it now) I think the on-screen failure message comes solely from the update script that calls canupdate.sh and I think there is no way to pass a nice message back or display on-screen info from canupdate.sh .. the only thing passed back is the exit code.
There are ~380 active installs for imx6 images (and approx. the same number of OE installs). Legacy LE images stopped at v8.2 and OE ended at v8.0 (which was a mess so most users remained on v7.0). Those installs are now old and we see greater problems (mostly from add-ons) when updating older installs to current. I appreciate the desire/intent to support a nice upgrade experience, but IMHO the simplest and best option is to force a clean install and not attempt to handle upgrades and migration from legacy images.