This turned out to be a misconfiguration, not loading .env where it should have been loaded.
.env is loaded in settings.py (django)
But .env was not loaded in celery.py as it was assumed to be loaded already. This seems not always the case. Sometimes celery.py is run from an _init_ script while .env is not loaded.
This causes celery to run without a valid broker URL, which causes network issues. These network issues cause problems for .delay() and .delay_on_commit()