I made backup copies and then copied the config.txt and cmdline.txt from the working SD install to my arm-testing install. After a small change to the kernel cmdline to find the btrfs root, I rebooted. And it worked!
Ok problem solved, but what setting was the cause? I swapped back my cmdline.txt and rebooted, still working. Ah, so then something in config.txt. I then proceed to add entries from my old config.txt to the new. After several edits and reboots, still working. Hmm.
Old:
# See /boot/overlays/README for all available options
# firmware
arm_64bit=1
enable_gic=1
#gpu_mem=64
#gpu_mem=128
gpu_mem=256
#gpu_mem=512
# gpio
dtparam=i2c_arm=on
dtparam=i2c1=on
enable_uart=1
# overclocking
over_voltage=6
arm_freq=1800
v3d_freq=600
#isp_freq=700
#h264_freq=700
hdmi_enable_4kp60=1
# vc5
#dtoverlay=vc4-fkms-v3d,cma-512
#dtoverlay=vc4-kms-v3d
dtoverlay=vc4-kms-v3d-pi4,cma-512
#dtoverlay=rpivid-v4l2
# display
disable_overscan=1
max_framebuffers=2
# 4K@30fps
#hdmi_group=1
#hdmi_mode=97
#hdmi_mode=95
#hdmi_mode=102
# 4k@60fps
# sound
dtparam=audio=on
#hdmi_ignore_edid_audio=1
#hdmi_drive=2
# bluetooth
dtoverlay=disable-bt
# os
initramfs initramfs-linux.img followkernel
kernel=kernel8.img
New:
# See /boot/overlays/README for all available options
# cpu/gpu
arm_64bit=1
gpu_mem=256
enable_gic=1
enable_uart=1
# gpio
dtparam=i2c_arm=on
dtparam=i2c1=on
# overclocking
over_voltage=6
arm_freq=1800
v3d_freq=600
#isp_freq=700
#h264_freq=700
hdmi_enable_4kp60=1
# bluetooth
dtoverlay=disable-bt
# sound
dtparam=audio=on
#hdmi_drive=2
# display
disable_overscan=1
max_framebuffers=2
# vc4
dtoverlay=vc4-kms-v3d-pi4,cma-512
# kernel
initramfs initramfs-linux.img followkernel
kernel=kernel8.img
What makes the difference? Nothing material that I can see, except for the order. If I put the old config.txt back into place, it is broken again.