похоже что проблема тут
var fileInZip = zip.Entries.FirstOrDefault(f => f.FullName == fileName);
if (fileInZip != null)
fileInZip.Delete();
тут идет поиск первого элемента, но чисто теоретически элемент может быть не один, если упаковано не совсем правильно. в таком случае будет удаление первого и попытка создать новую запись, которая скорее всего либо не отработает либо отработает создав 2 записи на 1 файл (путь)