Digging into this some more today, I've continued to find what seems to be odd behavior. If I remove all of the limit_req directives, then the mapped variables based on the upstream are always present:
{
"upstream_http_tier": "",
"tier": "02x",
"http_tier": "",
"key_two": "",
"key_three": "",
"key_two_from_upstream": "match",
"key_three_from_upstream": "nonempty",
}
Whereas if I add the limit_req directives that reference "key_*" back in, then those keys are no longer populated correctly:
{
"upstream_http_tier": "",
"tier": "02x",
"http_tier": "",
"key_two": "",
"key_three": "",
"key_two_from_upstream": "",
"key_three_from_upstream": "",
}