First of all I would recommend to validate the event in the listener itself i.e
if (ExecutionListener.EVENTNAME_END.equals(delegateExecution.getEvent())
Second of all, there might be an issue with transactions. Setting proper transaction boundaries is very important. I see that You already played around with asynchronous approach, please verify if this post will be helpful