How to use a hook to override an update_post_meta call in a plugin?

If you hook into the hooks provided in update_post_meta() function and still use this function in your callback, that would result in a loop which would probably end with the timeout..

As the per the comments:

add_action("wp_insert_post", function( $post_ID ) {

    if ( ! $post_data = get_post( $post_ID ) ) return;

    // try to make this run only once needed ( from the question, the content is empty and cPT is dlm_download )
    if ( "dlm_download" == $post_data->post_type && ! $post_data->post_content ) {
        update_option( "dlm_download_members_only_yes", $post_data->ID );
    }

    return;

}, 10);

add_action("init", function() {
    if ( $pid = (int) get_option( "dlm_download_members_only_yes" ) ) {
        update_post_meta( $pid, "_members_only", "yes" );
        delete_option( "dlm_download_members_only_yes" );
    } return;
});

init hook is always there (page load, AJAX, etc) so this should always work and would work on multiple entries as well..