This $events_repeater = get_field( 'events_repeater' );
returns a nested array that contains all the rows of a repeater and you’re passing that array back to ACF in have_rows
this if ( have_rows( $events_repeater ) ):
should be if ( have_rows( 'events_repeater' ) ):
and this while ( have_rows( $events_repeater ) ) : the_row();
should be while ( have_rows( 'events_repeater' ) ) : the_row();