Update: Found solution
So I don't think the profile_update hook works the way its supposed to or I am using it wrong either way. what I found was that profile_update fired before the updates to the post/user were pushed, which meant if i was to check the values of the meta they would be the old ones, even though in the WP Docs it says it passes on the old values for the user as a variable to the called function which i amused meant that if I query for a metavalue in the function it would be the updated one.
If you need a hook which checks if any metavalue on any post type (even user) and more importantly fires AFTER the update is pushed to the data tables use updated_{YOUR POST TYPE}_meta (WP Docs).
so instead of
add_action( 'profile_update', 'site_refProfile_existingUser', 10, 2);
I used this
add_action( 'updated_user_meta', 'site_refProfile_existingUser',10, 2);
Also make sure in your function you remove_action at the start and add_action at the end if you are updating the meta of the user otherwise i assume it will get stuck in a infinite loop
function site_refProfile_existingUser( $meta_id, $user_id) {
remove_action( 'updated_user_meta', 'site_refProfile_existingUser',10, 2);
// your code.....
add_action( 'updated_user_meta', 'site_refProfile_existingUser',10, 2);
}
(The infinite loop thing is an assumption as its happened to me before while using another hook)
Answer from Fofandi on Stack Overflow