Давайте попробую пояснить что не так.
foreach (GameObject tmp in Group)
{
}
вот тут вы запускаете перебор всех элементов.
но потом вы МЕНЯЕТЕ КОЛИЧЕСТВО элементов в коллекции.
Group.Remove(tmp);
и вот нумератор проходит по индексам, а они уже не совпадают.(после старта не обновляются).
В итоге если мы уничтожаем (не удаляем) объект по ссылке , через Destroy(gameObject);
остается список из ссылок на null;
Если же удаляем объекты из коллекции во время похода по коллекции - получаем ошибку с индексами.
как решить.
или сделать через for
for(int i =0; i <list.Count;i++)
{
Destroy(list[i]);
list.RemoveAt(i);
i--; // сместили индекс,если было удаление, так как размер коллекции уменьшился
другой вариант - просто после цикла с Destroy(gameObject);
почистить список list.Clear(); (если все зараз всегда удаляются)
Главное надеюсь, чтоб суть проблемы ясна стала.