[Thinkpad Tablet General] joeblowma:
OK. I figured out what I had to do. I took dd images of boot_a and boot_b, found that I was booting boot_a and it matched the magisk patched boot image I flashed, boot_b was the same boot.img from the download I had of my previous firmware and concluded it just wanted the clean boot.img from before I had magisk patch it.

I followed the guide here (the comments are important!), took the original boot.img got it's SHA1 hash, compressed and placed it at /data/magisk_backup_ce955430833746214a5e3949e2a05d08e35abf72/boot.img.gz and magisk was able to restore it.

I started the update process again, and wow it takes a long time to download 96MB, waited and waited and decided it was stalled at around 98% complete, so I pulled a logcat and found this repeating over and over again (with other stuff thrown in):

02-04 08:13:58.947 13956 13956 I derive_classpath: export BOOTCLASSPATH /apex/com.android.art/javalib/core-oj.jar:/apex/com.android.art/javalib/core-libart.jar:/apex/com.android.art/javalib/okhttp.jar:/apex/com.android.art/javalib/bouncycastle.jar:/apex/com.android.art/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/framework-graphics.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/apex/com.android.i18n/javalib/core-icu4j.jar:/system/framework/mediatek-telephony-base.jar:/system/framework/mediatek-telephony-common.jar:/system/framework/mediatek-common.jar:/system/framework/mediatek-framework.jar:/system/framework/mediatek-ims-common.jar:/system/framework/mediatek-ims-base.jar:/system/framework/mediatek-telecom-common.jar:/apex/com.android.appsearch/javalib/framework-appsearch.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.ipsec/javalib/android.net.ipsec.ike.jar:/apex/com.android.media/javalib/updatable-media.jar:/apex/com.android.mediaprovider/javalib/framework-mediaprovider.jar:/apex/com.android.os.statsd/javalib/framework-statsd.jar:/apex/com.android.permission/javalib/framework-permission.jar:/apex/com.android.permission/javalib/framework-permission-s.jar:/apex/com.android.scheduling/javalib/framework-scheduling.jar:/apex/com.android.sdkext/javalib/framework-sdkextensions.jar:/apex/com.android.tethering/javalib/framework-connectivity.jar:/apex/com.android.tethering/javalib/framework-tethering.jar:/apex/com.android.wifi/javalib/framework-wifi.jar
02-04 08:13:58.947 13956 13956 I derive_classpath: export DEX2OATBOOTCLASSPATH /apex/com.android.art/javalib/core-oj.jar:/apex/com.android.art/javalib/core-libart.jar:/apex/com.android.art/javalib/okhttp.jar:/apex/com.android.art/javalib/bouncycastle.jar:/apex/com.android.art/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/framework-graphics.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/apex/com.android.i18n/javalib/core-icu4j.jar:/system/framework/mediatek-telephony-base.jar:/system/framework/mediatek-telephony-common.jar:/system/framework/mediatek-common.jar:/system/framework/mediatek-framework.jar:/system/framework/mediatek-ims-common.jar:/system/framework/mediatek-ims-base.jar:/system/framework/mediatek-telecom-common.jar
02-04 08:13:58.947 13956 13956 I derive_classpath: export SYSTEMSERVERCLASSPATH /system/framework/com.android.location.provider.jar:/system/framework/services.jar:/system/framework/ethernet-service.jar:/apex/com.android.appsearch/javalib/service-appsearch.jar:/apex/com.android.art/javalib/service-art.jar:/apex/com.android.media/javalib/service-media-s.jar:/apex/com.android.permission/javalib/service-permission.jar
02-04 08:13:58.947 13956 13956 I derive_classpath: export STANDALONE_SYSTEMSERVER_JARS /apex/com.android.os.statsd/javalib/service-statsd.jar:/apex/com.android.scheduling/javalib/service-scheduling.jar:/apex/com.android.tethering/javalib/service-connectivity.jar
02-04 08:13:58.957 13955 13955 E otapreopt: Bad access() to /apex/com.android.art/javalib/arm64/boot.art: No such file or directory
02-04 08:13:58.957 13955 13955 E otapreopt: Bad boot image.
02-04 08:13:58.961 13818 13818 E otapreopt_chroot: Running otapreopt failed: Failed execv(/system/bin/otapreopt _b 10 dexopt

The boot image isn't bad, it's stock as I rebooted without root patch. I'm in the midst of trying to update it again after factory resetting it. If that doesn't work I'm going to try the lenovo tools again, which I know will fail just like they did before I unlocked and rooted it. After that... no idea. Stick with this version rooted and hope by the time they release android 13 it's a full image update? ~sigh~ it never used to be this difficult.

edit:/ update successful, took a long time at 98% this time but wasn't stuck in a loop and did find the boot stuff. I had some foresight and pre-patched the boot.img and thanks to the backup program you recommended I should be good to go. Hopefully next time isn't quite this painful!