In example C, or does return a scalar. You just don't do anything with the scalar. print @list or die is not parsed as print(@list or die); it's parsed as print(@list) or die. Therefore, print only sees the list; it doesn't see the result of the or operator.
Update: meh... the right hand side of or can result in or returning a list:
my @A = qw();
my @B = qw(A B C D);
print Dumper(@A or @B);