Данное выражение оценивается как логическое значение, а не как набор узлов. Я предполагаю, что вы хотите проверить, соответствует ли ProjectName параметризованному тексту. В этом случае вам нужно написать
//ErrorTable/ProjectName[text()='{0}']
Это дает вам список всех узлов (набор узлов), соответствующих данному условию. Этот список может быть пустым, и в этом случае C # -выражение в вашем образце вернет ноль.
В качестве запоздалой мысли: вы можете использовать исходное выражение xpath, но не с SelectSingleNode, а с Evaluate, например:
(bool)xmlDocument.CreateNavigator().Evaluate(String.Format("//ErrorTable/ProjectName/text()='{0}'", projectName));