wp_query to print posts if have X custom field value

You could use meta_query, it can handle arrays and strings.

So something like this

// get location meta, will be easier to determine what is the type of value
$location = get_post_meta(get_the_ID(), 'Location',true);

$posts = get_posts([
    'posts_per_page' => 10,
    'post_type'      => 'post',
    'post_status'    => 'publish',
    'orderby'        => 'date',
    'meta_query'     => [
        [
            'key'     => 'Location',
            'value'   => $location,
            'compare' => is_array($location) ? 'IN' : '='
        ]
    ]
]);

Now you can do all the rest as usual.

So what we did here is

  1. get and assing Location meta to a variable, $location
  2. add that variable as value in the meta_query
  3. based on the type of value of the variable we create the compare logic

By the way, get_permalink() and the_title() will output/return the link and title of the current post, NOT the looped post.

When using get_posts() they are available as object properties, so like this

foreach($posts as $post) {
    $post->post_title; // the post title
    get_permalink($post->ID) // the looped post permalink, we need to pass the looped post ID as argument to "tell" get_permalink what link we need
}