Дело в том, что preUpdate вызывается внутри flush. А внутри preUpdate через логгер снова вызывается flush. Нужно или выполнить "сырой" sql без ORM, или вручную вызвать расчет changeset'а вместо flush:
$this->em->persist($entity);
$meta = $this->em->getClassMetadata(get_class($entity));
$this->em->getUnitOfWork()->computeChangeSet($meta, $entity);