The issue turned out to be that the EJB attempted to use the same transaction as used by JBPM Workitem Handler. This not the behavior I was expecting. I needed to EJB to have its own transaction. I accomplished this by starting a new transaction within the EJB. I added an annotation (@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)) to accomplish this. Now the Workitem handler catches the exceptions without rolling back the JBPM transaction.
Ed