you could rewrite the full code and use the build-in loop counter $wp_query->current_post
to fix the css classses and add a class for the first post per row to clear the float to prevent the ‘wacky sticking’;
example:
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php /* Start the Loop */ ?>
<div class="entry-content-<?php echo (( $wp_query->current_post == 0 ) ? 'main' : 'rest' ); if( $wp_query->current_post%2 == 1 ) echo ' left-post'; ?>">
<?php get_template_part( 'content', get_post_format() ); ?>
</div>
<?php endwhile; ?>
additional css:
.left-post { clear: left; }