Views Related Items Block when Taxonomy term is not on URL
Okay, I spent another day working on this and finally kind of got it working.

The goal here is to create contextual taxonomy filters that will retrieve all products with the same shape AND color as item "ABC123" as displayed on the browser URL, where item ABC123 happens to have a shape of "square" and color of "red".

Getting "square" into the taxonomy filter is easy,


create a view block
add a contextual filter of type "Content: Has taxonomy term ID" 
since this is a block with no path, we need to give it a default value, do that and select "Taxonomy ID from URL" and "Load default filter from node page, that's good for related taxonomy blocks"
select the vocabulary you want (in this case "shape")


Now comes the hard part, we need to filter for "color" of item ABC123, but it is not on the browser URL in any shape or form. We need to somehow get the node contents of item ABC123, look into its "color" field, and then scan for all products with that color.


create a 2nd contextual filter of type "Content: Has taxonomy term ID"
click "Provide default value" and select PHP code

$title = arg(2, drupal_get_path_alias()); // arg #2 is title of item on URL
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'product'); // product is the machine name of my content type
->propertyCondition('status', 1)
->propertyCondition('title', $title);
// title is a node property, for other fields use ->fieldCondition 

$result = $query->execute();

if (isset($result['node'])) {
$items_nids = array_keys($result['node']);
$items = entity_load('node', $items_nids);
}

reset($items);
$first_item = key($items);

$item = node_load($first_item);

$color = field_get_items('node', $item, 'field_color');
return ($color[0]['tid']);


For "Views Related Items Block", we also need to filter out ABC123, but that is an exercise left for another day.

Please note that this is the very first time I dabble into Drupal API calls, and the code above is clobbered together from various places on line. The code above make some assumptions (e.g. title is unique), is not efficient, may or may not handle translations and may not be totally secure. Reference at your own risk!