Дайте этому шанс:
var duplicates = (from req in doc.Descendants(ns + "StateSeparationRequest")
group req by req.Descendants(ns + "StateRequestRecordGUID").First().Value
into g
where g.Count() > 1
select g.Skip(1)).SelectMany( elements => elements );
foreach (var duplicate in duplicates)
{
duplicate.Remove();
}
Что по сути делает этот запрос:
Группировка элементов StateSeparationRequest по уникальным значениям StateRequestRecordGUID.
Для каждой группы, имеющей более одного соответствующего StatateSeparationRequest, выберите все, кроме первого.
То, что у вас осталось, это список дубликатов, который вы можете перебрать и удалить.