Is there a before_save_post hook or something similar

There is a hook called transition_post_status which runs at every transition. You have both the old and new status available inside the hook.