I honestly don't know. This happened by just rebooting... My theory is that when you reboot, it kills all processes "nicely" with SIGTERM but if they don't stop after some time, it kills them forcefully with SIGKILL. I think Fulcrum can take a while to shutdown if it gets killed while writing to the DB, so when it gets SIGKILLed later, DB gets corrupted.
Do you have timeoutstopseconds set? I guess I should ask if you're using a systemd unit first 😁 It should wait for it on a reboot if you have the settings set and it's running in the system.slice