Almost.
This will not work thou:
get_post_meta( $post_id, 'wpcf-tag1', 'wpcf-tag3', 'wcpf-tag4', true );
The related Document of this WordPress API is here:
https://developer.wordpress.org/reference/functions/get_post_meta/
The key must be a String, it cannot be an array or similar, hence it must be one value only.
Your code needs to get_post_meta() for each single field at once.
Populate a new $variables (like $custom_title in the example) with what you get from the get_post_meta() for each field.
Then, as elaborated to update a Post field, it's enough to run update_post_meta()
https://developer.wordpress.org/reference/functions/update_post_meta/
No need to run the whole chunk of wp_update_post().
It's enough to gather the information in a $variable, and then update_post_meta() the new field with this value.
A script that would put together the value of 3 fields, and update a 4th with this new value, is like this:
$variable_one = get_post_meta($post_id, 'first-field-slug', true );
$variable_two = get_post_meta($post_id, 'second-field-slug', true );
$variable_three = get_post_meta($post_id, 'third-field-slug', true );
$new_variable = $variable_one . ', ' . $variable_two . ', ' . $variable_three;
update_post_meta($post_id, 'new-field-slug', $new_variable);
This will update a new field with comma separated values of the 3 previous fields.
There are better ways to achieve this, but this gives a general idea how to get/post information from/to the database with the two functions elaborated.
This is custom code, to work with these API's I suggest to consider the Documentation - especially of WordPress if you work with their API as we do here.