The trick is in the GetEnumerator method that is called.
Through that method the Switch doesn't see a hash table, but a simple object that has a Name and a Value property.
You can check by doing
$myhash.GetEnumerator() | Get-Member
I hope that didn't confuse you more