I tried it in a VM and had the same experience. DNF is in fact calling systemctl poweroff:
Mar 07 14:48:42 fedora python3[860]: Upgrade complete! Cleaning up and powering off...
Mar 07 14:48:42 fedora dnf-3[860]: Cleaning up downloaded data...
Mar 07 14:48:42 fedora systemd-logind[1501]: The system will power off now!
Mar 07 14:48:42 fedora systemd-logind[1501]: System is powering down.
But then later:
Mar 07 14:48:43 fedora systemd[1]: dnf-system-upgrade.service: Main process exited, code=killed, status=15/TERM
Mar 07 14:48:43 fedora systemd[1]: dnf-system-upgrade.service: Failed with result 'signal'.
Mar 07 14:48:43 fedora systemd[1]: Stopped dnf-system-upgrade.service - System Upgrade using DNF.
Mar 07 14:48:43 fedora systemd[1]: dnf-system-upgrade.service: Triggering OnFailure= dependencies.
What seems to have happened is that systemd stopped dnf-system-upgrade.service by sending SIGTERM, which is fine for normal services, but since 2016 that’s interpreted as a failure for Type=oneshot . That triggers OnFailure=dnf-system-upgrade-cleanup.service, which runs systemctl reboot.
As a oneshot service, it needs to exit before systemd terminates it, or possibly it could add SuccessExitStatus=SIGTERM as a workaround.
If you see the same log output on your system, you can open an issue if you’d like, but this is all slated for replacement with dnf5