I finally understand this now. gtk_ui.py's do_reboot() and do_shutdown() call reboot/poweroff. But under systemd this is faster and kills ubiquity.service before it gets to orderly shutting down X.org in ubiquity-dm. So this race has been there all the time, we just didn't notice on most systems as reboot was slow enough to give ubiquity-dm time to get past the X.org shutdown.
I finally understand this now. gtk_ui.py's do_reboot() and do_shutdown() call reboot/poweroff. But under systemd this is faster and kills ubiquity.service before it gets to orderly shutting down X.org in ubiquity-dm. So this race has been there all the time, we just didn't notice on most systems as reboot was slow enough to give ubiquity-dm time to get past the X.org shutdown.