maybe this will help - I once had a locking problem with an asynchronous step where I called program with a submit and return - the return statement caused the lock not to be removed and the terminating event could not be executed.
if not: if you try to restart the workflow manually what happens? or if you try locking the workflow for execution and unlocking it?