The problem is that you are passing a comma separated list of terms, not an array of term. For example, if you enter ‘army,navy,airforce’ in the custom field:
$related = array ( get_post_meta($post->ID, 'related_categories', true) );
//$related = array('army,navy,airforce');
//What you need is
//$related = array('army','navy,'airforce');
You need to transform each term into a array member, for example using explode:
$related = explode(',', trim( get_post_meta($post->ID, 'related_categories', true) ) );
Anyway, I think that you should think in another way to get your purpose. Using a custom field to manual store a list a related categories is not appropiate from my point of view. You could created, for example, a hierarchical taxonomy and set related categories under the same parent, or use the core tag taxonomy to set relationships, etc, I think this is better and more “natural” than using a custom field to store a set of taxonomy terms.