Это, вероятно, больше не актуально, но для справки:
исключение указывает на своего рода нарушение параллелизма в каталоге. Чтобы обойти это, вы должны изменить
shardMap.DeleteShard(shard);
что-то вроде:
var shard = _shardMap.GetShard(pointMapping.Shard.Location);
_shardMap.DeleteShard(shard);
Вы можете забыть о Thread.Sleep, это вступает в силу немедленно.