On the few occasions when I’ve needed to do something similar, I’ve used the callback unattach-update-reattach method, which is also described on this older Q&A, Update post on save and on the developer docs comments.
function your_save_post_callback( $post_id, $post, $update ) {
// unattach the callback
remove_action('save_post', 'your_save_post_callback');
// update post
wp_update_post( $args );
// reattach the callback
add_action('save_post', 'your_save_post_callback');
}