The setup is 2 sites sharing the same users via the custom users and usermeta tables, hence the SQL code in the function. Unfortunately each site has it’s own rows of the metadata so both rows need to be in sync else user won’t have same EOT across both sites 
add_action( 'ws_plugin__s2member_during_stripe_notify_during_subscr_payment', 'duplicate_meta');
function duplicate_meta() {
// site 1 prefix
$prefix_1 = 'vp_';
// Site 2 prefix
$prefix_2 = 'tv_';
$my_eot = get_user_meta( $user_id, 'vp_s2member_auto_eot_time', true );
// connect to the other database
$user="tv";
$password="mypassword";
$database="tv";
$host="localhost";
$con=mysqli_connect($host,$user,$password,$database);
$update= "UPDATE tv_usermeta SET meta_value= '".$my_eot."' WHERE user_id=".$user_id." AND meta_key='tv_s2member_auto_eot_time'" ;
mysqli_query($con,$update) ;
}
The above code works when modified to run on manual profile updates such as:
add_action( 'profile_update', 'duplicate_meta', 10, 2);
function duplicate_meta($user_id, $old_user_data) {
and it updates the EOT across both table rows for the 2 sites. But profile_update is only for changes via the front end.
Also as you’ve probably seen on another similar topic, I have the user roles synchronised across both sites using the kinsta_share_users plugin.
So all that’s left is the EOT to update across 2 table rows when people use a Buy it Now on Stripe.