Simple XML .query SELECT statement times out on 1 SQL SERVER instance
I'm not sure if it answers your question, but I had a similar problem. The resulution was limiting SQL Server to execute the query using one processor only.

If you have the same problem, this should work:

DECLARE @RequestXML xml = '&lt;Foo&gt;
    &lt;Node1&gt;Hello&lt;/Node1&gt;
    &lt;Node2&gt;World&lt;/Node2&gt;
    &lt;Node3&gt;Today&lt;/Node3&gt;
&lt;/Foo&gt;'

SELECT
    @RequestXML.query('/Foo/Node1[1]')
    ,@RequestXML.query('/Foo/Node2[1]')
    ,@RequestXML.query('/Foo/Node3[1]') 
OPTION(MAXDOP 1)


The thing is that SQL Server Query Optimizer decides that the query is costly enough to split its execution and merge those results. And sometimes this creates problems, so lowering degree of parallelism (MAXDOP) can solve it.

EDIT

Looking at the execution plan for this query, I find it hard to believe that somewhere in the middle of execution of each branch for @RequestXML.query('...'), estimated number of rows was 180,000. However, when I told it that I promise I will need only the first Foo, he reduced it to 900. So, try this...

DECLARE @RequestXML xml = '&lt;Foo&gt;
    &lt;Node1&gt;Hello&lt;/Node1&gt;
    &lt;Node2&gt;World&lt;/Node2&gt;
    &lt;Node3&gt;Today&lt;/Node3&gt;
    &lt;Node4&gt;Tomorrow&lt;/Node4&gt;
&lt;/Foo&gt;'

SELECT
    @RequestXML.query('/Foo[1]/Node1[1]')
    ,@RequestXML.query('/Foo[1]/Node2[1]')
    ,@RequestXML.query('/Foo[1]/Node3[1]')
    ,@RequestXML.query('/Foo[1]/Node4[1]')