theme options echoing multiple times

The options are being output within the loop, so are being repeated for each iteration of the loop.

To check within the loop and only output something on the first iteration:

while ( have_posts() ) : the_post();

    if( $wp_query->current_post == 0 ):
        // this is the first post
        // output your options
    endif;

    // other loop stuff, title, content, etc.

endwhile;

similarly, to check if you are on the last post of the loop:

while ( have_posts() ) : the_post();

    if( $wp_query->current_post == ( $wp_query->post_count - 1 ) ):
        // this is the last post
    endif;

endwhile;