Additionally Hibernate is logging the insert:
[STDOUT] Hibernate: insert into USER (...etc etc
This was caused by my Entities not having their auto-incrementing IDs annotated with @GeneratedValue.
It makes sense in hindsight, but the symptoms were odd. I'm still not sure why the flush() didn't work.
I had changed my method to have the FlushModeType.MANUAL but the entityManager.flush() was still not hitting the database. The flush() method must have an active transaction otherwise it will be ignored. If using a POJO what is the reccommended way to get this working? Is the Seam Managed Transaction sufficient for the flush (ie. so it's not ignored)?