You seem to have got yourself very confused.
Assuming N is a node-set (or in 2.0 a node-sequence) and P, Q are boolean expressions, then
N[P and Q]
selects those nodes in N for which P and Q are both true, while
N[P or Q]
selects those nodes in N for which either P or Q is true.
If you use a node-set in a context where a boolean is expected, for example <xsl:if test="N[P or Q]">, then the result is true if the node-set is non-empty.
If you write
N[P] and N[Q]
then the expressions "N[P]" and "N[Q]" both select node-sets. The "and" operator converts these node-sets to booleans, so the result is true if neither N[P] nor N[Q] is empty. Similarly
N[P] or N[Q]
is true if either N[P] or N[Q] is non-empty.
I hope this clears things up for you.
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference