It is because you are trying to pass array of string instead of int.
So it search for terms slug with this value instead in terms id.
function remove2categories( $new_status, $old_status, $post ) {
if ( $old_status == 'private' && $new_status == 'publish' && !in_category(array(3152), $post ) ) {
$catsID = array(1186, 1208);
wp_remove_object_terms( $post->ID, $catsID, 'category' );
}
}
add_action( 'transition_post_status', 'remove2categories', 10, 3 );