Asi que el simbolo || es XOR???
Me temo que el operador logico XOR (or exclusivo) no existe en C#. Es por eso que no obtienes el resultado que deseas.
El gorro de gnomo es el operador XOR.
...Por eso en realidad ^ no sirve para el problema mencionado arriba donde necesitamos un operador logico....