Custom Post Type single.php template only shows the latest post

You shouldn’t be using custom queries in these templates. The main query (using have_posts();, the_post(); etc. without $loop) is already set up with the correct posts for these templates.

Look at the custom query you’re using on the single template:

$args = array('post_type' => 'journal', 
        'showposts' => 1,
        'post_status' => 'publish',
        'orderby' => 'date',
        'order' => 'DESC'); 
         $loop = new WP_Query($args);

That’s a query for the latest journal post. So of that’s what you’re going to see when you use $loop->the_post(). Also, showposts is deprecated. Use posts_per_page instead.

So this:

if ( $loop->have_posts() ) : while ( $loop->have_posts() ) : $loop->the_post(); ?>

Needs to be:

if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>