Выспался. Кажись дошло. Два удаления подряд.

## Код:
```
x = list.First;
while (x != null)
{
   tmp = x.Next;
   DoSomethingAndMayBeDelete(x);
   x = tmp;
}
```

Процедура DoSomethingAndMayBeDelete(x); иногда могла удалить более одного элемента, в том числе и два подряд, после чего указатель tmp указывал на уже удаленный объект. В списке "трупов" не было, "труп" был во временной переменной цикла.