Mutate only works at the top level?

Here is rename.conf
input {
stdin {}
}

filter {
mutate { add_field => { "[b]" => "bozo" } }
mutate { rename => [ "[b]", "[fancy][pants]" ] }
}

output {
stdout { codec => rubydebug { metadata => true } }
}

Here is rename2.conf
input {
stdin {}
}

filter {
mutate { add_field => { "[@metadata][b]" => "bozo" } }
mutate { rename => [ "[@metadata][b]", "[fancy][pants]" ] }
}

output {
stdout { codec => rubydebug { metadata => true } }
}

The only difference is using [@metadata]
However, the first one works as I expected and the second one does not.

[anelson@localhost logstash-2.3.2]$ bin/logstash -f ~/elk/configs/rename.conf
Settings: Default pipeline workers: 4
Pipeline main started
fubar
{
"message" => "fubar",
"@version" => "1",
"@timestamp" => "2016-06-15T16:22:26.052Z",
"host" => "localhost.localdomain",
"fancy" => {
"pants" => "bozo"
}
}
Pipeline main has been shutdown
stopping pipeline {:id=>"main"}
[anelson@localhost logstash-2.3.2]$ bin/logstash -f ~/elk/configs/rename2.conf
Settings: Default pipeline workers: 4
fubar
{
"message" => "fubar",
"@version" => "1",
"@timestamp" => "2016-06-15T16:22:40.207Z",
"host" => "localhost.localdomain",
"fancy" => {
"pants" => nil
},
"@metadata" => {
"b" => "bozo"
}
}