execute function after one completed

If you look at the source wp-includes/post.php, then you’ll see that wp_transition_post_status(), which contains transition_post_status, at both occurrences, in wp_insert_post() and wp_publish_post(), is called before the save_post hook. In short, the order is just different than you want it to be.