Если artisan queue:work такой костыльный, что берет из очереди (из очереди!!! это ж его основное предназначение!) одну и ту же задачу, то может выкинуть его нафиг как профессионально непригодный?
Если нельзя выкинуть, то можно навесить лок на уровне редиса - блокировать Job при начале обрабокти и отпускать по завершении.
https://redis.io/topics/distlock