Multiple Loops On Custom Post Type Template?

It sounds like what you are trying to do is make a kind-of “related posts” feature for your “Locations” single post display based on the category.

You don’t need to be checking to see if the post is in the “Locations” post type. You are using single-locations.php unless you site is broken only “Locations” posts should show up there. You really only need to check the ID.

// Most of $args is the same every time. 
// no need to repeat it
$args = array(
    'posts_per_page'  => 5,
    'orderby'         => 'post_date',
    'order'           => 'DESC'
);

if ( 44 == $post->ID ){
    $args['cat'] = 5; // Note: the parameter is 'cat' not category    
} elseif (46 == $post->ID ) {
    $args['cat'] = 10; // Note: the parameter is 'cat' not category    
} // and so on

$loc = new WP_Query($args);
while ( $loc->have_posts() ) : $loc->the_post(); global $post; ?>
    <h3><a href="https://wordpress.stackexchange.com/questions/97424/<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3><?php
    the_excerpt(); 
endwhile; wp_reset_postdata();

I took the liberty of cleaning up your code.

  1. You don’t need to repeat the complete $args array every time since most of it doesn’t change.
  2. Note the change of category to cat
  3. You don’t need to create a different variable, or a different query, for each category. You can use the same name and one query. Instead, build the query parameter array and put the query itself and the Loop afterwards.

That is a lot of code to read. Apologies if I missed something but I think that should work for you a little better.