Found the reason for this.
:contains()
treats the parenthesis as string delimiters, so you don't need quotes around the string.
If you wrap the string in quotes, QueryPath looks for the quotes.
For example, :contains('Subject')
only matches the pcdata <element>'subject'</element>
.
Just needed to leave the single quotes off and do it like :contains(Product Description)
.
Source: https://groups.google.com/forum/#!topic/devel-querypath/pupZjpTKyOI