Yeah, that was my idea! As it turns out, what wc_memberships_user_membership_saved actually does, doesn’t match the documentation. At all. It passes two parameters rather than the three documented (which are still different from the status_changed hook), and neither of them is what is documented there. (I can’t remember now what actually got passed, but I couldn’t figure out how to get the user or the membership ID out of it.)
I spent what seemed like a week on this yesterday before settling on making people log out/in to WordPress to make it work.