Потому что вы не должны замыкать его так:
$ php -r'function foo(){ return 2 or false; } var_dump(foo());'
bool(true)
return
имеет меньше приоритета, чем, так сказать, or
(на самом деле, это не оператор, поэтому выполняется целое выражение), но =
имеет более высокое значение.
$page = simplexml_load_file(fetchXML()) or die("Error loading XML");
То же, что и
($page = simplexml_load_file(fetchXML())) || die("Error loading XML");
В то время как
return simplexml_load_file($address) or die("Error loading XML");
То же, что и
return (simplexml_load_file($address) or die("Error loading XML"));
См. Также приоритет оператора