У вас неверно описано основное условие игры. Оно звучит так:
- в пустой (мёртвой) клетке, рядом с которой ровно три живые клетки, зарождается жизнь;
- если у живой клетки есть две или три живые соседки, то эта клетка продолжает жить; в противном случае, если соседей меньше двух или больше трёх, клетка умирает («от одиночества» или «от перенаселённости»)
При формализации получаем:
- Два соседа: новое состояние = старое состояние
- Три соседа: новое состояние = живая
- Иначе: новое состояние = мёртвая
У вас же при двух соседях клетка всегда становится живой.
Ну и можно слегка упростить алгоритм, если использовать не bool, а char и обозначать живую клетку как 1, мёртвую как 0. Тогда количество соседей можно посчитать просто суммируя значения, без тернарных операторов.