After review, I would expect your code to work properly: to only save the creating author’s nickname, and not override it later.
Here’s some code to try with slight improvements and redundancies (tested):
function data_nickname( $post_id, $post, $update ) {
// If the post is being updated, bail.
if ( $update ) {
return;
}
$author_ID = $post->post_author;
$nickname = get_the_author_meta( 'nickname', $author_ID );
// Only set post meta if it doesn't already exist.
add_post_meta( $post_id, 'data_nickname', $nickname, true );
}
add_action( 'wp_insert_post', 'data_nickname', 10, 3 );
I recommend changing the post meta key to something more clear than data_nickname
, like original_authors_nickname
. In five years and possibly a different developer, it will then be more clear what it’s purpose is.