You're wisely printing out the condition you're about to evaluate right before doing so ... but did you read the output?
$cTestH{$dbFile}{$timeRng}{$regionName}{$1} - see that $1 there? You escaped the $, so $1 shows up literally. Not what you want. Not sure what you want, but either that \$1 should become $1 or \$$1 - look at the output closely for both of those to see how they turn up and pick the right one for your purposes.
What I've done in the past is to just replace it with the new value directly, which means getting rid of all them leaning toothpicks: $bool =~ s/([a-zA-Z]\w*)/$cTestH{$dbFile}{$timeRng}{$regionName}{$1}/g; - you end up with much less to evaluate. However, you don't get any short-circuiting if any of the lookups require significant time (e.g., it's a tied hash or you're doing some sort of db lookup or whatever).