Secondary Query Is Breaking Main Query

you don’t need to call wp_reset_postdata() for get_posts() because it does not actually modify global variable $wp_query.

$posts though is a global variable used by WordPress. Change that to a new name and what you have should work.

$args = array( 'post_type' => 'quote', 'posts_per_page' => 1, 'orderby' => 'rand' );
$quote_posts = get_posts( $args );

if (sizeof($quote_posts) > 0) {
    echo '<p class="quote"><span class="quote-sym">&quot;</span>'.$quote_posts[0]->post_content.'<span class="quote-sym">&quot;</span></p>';
    $author = trim(get_field("author", $quote_posts[0]->ID));
    if (!empty($author)) {echo '<p class="author">- '.$author.'</p>';}
 } 
 //End block