It looks like your xml document lacks a root element. I've added one <Root> node to wrap the two <Header> nodes. The code below shows how to retrieve the expected value BatchProcessed by leveraging your XPath request.
var xml = @"<Root><Header>
<reference>
<identifier>BatchProcessed</identifier>
<datetime>2011-08-15T05:12:00+10:00</datetime>
</reference>
</Header>
<Header>
<reference>
<identifier>Running</identifier>
<datetime>2011-08-15T05:12:00+10:00</datetime>
</reference>
</Header></Root>";
var xdoc = new XmlDocument();
xdoc.LoadXml(xml);
XmlNode node3 = xdoc.SelectSingleNode("//identifier/text()");
Console.WriteLine(node3.Value); // -> "BatchProcessed"
There's also a chance that the missing root node was bearing a default namespace (which adds a little level of complexity). The code below demonstrates how to tackle this.
var xml = @"<Root xmlns=""http://www.example.com/schemas/0.1""><Header>
<reference>
<identifier>BatchProcessed</identifier>
<datetime>2011-08-15T05:12:00+10:00</datetime>
</reference>
</Header>
<Header>
<reference>
<identifier>Running</identifier>
<datetime>2011-08-15T05:12:00+10:00</datetime>
</reference>
</Header></Root>";
var xdoc = new XmlDocument();
xdoc.LoadXml(xml);
var ns = new XmlNamespaceManager(new NameTable());
ns.AddNamespace("ns", "http://www.example.com/schemas/0.1");
XmlNode node3 = xdoc.SelectSingleNode("//ns:identifier/text()", ns);
Console.WriteLine(node3.Value); // -> "BatchProcessed"