First up, these aren't the same. When you did this
case $var[y] || $var[z]:
You are only checking whether the values $var[y] and $var[z] are true or false, you're not checking with empty. Since an empty value does get cast to boolean false this works, but it's not the same. Turn on error notices and don't set one of these (instead of just setting it to empty string), and you will see the difference.
switch(empty($var))
Here you checked whether the $var variable is empty, which you didn't do in the first part at all. Anyway, since in your example $var is never empty, this is always false. So you're checking your case statements against boolean false. That negates the logic. That's why you're && and || get reversed. Logically the following is correct.
!$a && !$b === !($a || $b)
$a || $b === !(!$a && !$b)
In case you didn't catch it, empty is in effect negating the logical boolean value of a variable. And with the case statements comparing to false, you end up in the first situation, !$a && !$b being equivalent to !($a || $b).
For fun try commenting out the $var lines at the beginning altogether.