custom posts archive pagination links /page/2/ ends up in 404

You should not be using WP_Query in this context. WordPress has already queried the correct posts for that archive with the main query, and you only need to use the basic loop to display them:

if ( have_posts() ) {
    while ( have_posts() ) { 
        the_post();
        
        // Post markup here.
    };
};