cloud_zurbag: когда вы вытягиваете данные из entityManager эти самые данные (сущности) начинают крутиться в Unit-of-work. Когда вы дергаете flush этот самый UoW (по умолчанию, поведение настраивается) сравнивает что было, что стало, генерирует SQL соответствующий и коммитит транзакцию (то есть все изменения уже обернуты в транзакцию, непонятно почему в описании вопроса еще раз в ручную оборачивается все). Потому очень даже легко, если случано поменять сущность где-то не в том месте, похерить данные (разве что СУБД вам транзакцию не даст закончить).
romteh
Самый простой способ устраить возможные факапы - убрать автоматическое добавление загруженный энтитей в UoW, что вынудит разработчика всегда делать persist (да, по умолчанию можно просто сделать flush при редактировании уже загруженной энтити).
Еще вариант - флашить только то, что поменялось:
$em->flush([$entity1, $entity2]);
будут вычислены изменения только этих двух сущностей и транзакция будет сформирована только для них. В этом случае игнорируются каскады и т.д.
Но вообще у меня к вам встречный вопрос, что статистика у вас делает в сущностях? Ей там не место (если конечно это не часть бизнес логики именно).