WordPress Genesis custom taxonomy archive shows 3 repeats of each post

You are using a nested loop in your code. You should only use the foreach loop, and pass the post ID to get_field(). Here’s an example:

$terms = get_terms( 
    [ 
        'taxonomy' => 'collection_categories', 
        'orderby'  => 'name', 
        'order'    => 'DESC'
    ] 
);

// Rest of the code  here 

foreach ( $posts as $post ) {

    //* One image from gallery on archive pages
    $images  = get_field( 'gallery', $post->ID ); 
    $image_1 = $images[0];

    ?>

    <a href="https://wordpress.stackexchange.com/questions/298174/<?php the_permalink( $post->ID ); ?>">
        <img src="<?php echo $image_1['sizes']['thumbnail']; ?>" alt="<?php echo $image_1['alt']; ?>" />
    </a><?php

}

// Don't forget to reset the postdata
wp_reset_postdata();