The desire is to catch OLE instead of SOSE to be less tightly coupled to hibernate in case we ever needed to change JPA providers.
The case that is producing the exception is very straightforward; i've breakpointed just before a versioned entity update is committed, committed a change directly in the db, and then allowed execution to continue.
It looks like from StaleObjectStateException vs OptimisticLockException that the answer should just be "use JPA annotations", but we are doing that. Specifically, the Entity in question imports annotations only from javax.persistence.*