If you manage to enable both jobExecutor and asyncExecutor (possibly on different nodes), you'll run into this all the time.
You should set exclusive flag on in tasks, so async jobs will have exclusive flag on, so async executor will lock process in DB to avoid parallel executions. Also you should make sure asyncJobLockTimeInMillis parameter is set properly to avoid job unlocking before previous task execution completes (or fails).
It helps for the most part, but still it's possible to get "optimistic locks" from time to time.