"Singularity exec" vs "docker run"

I have traced the issue to these few lines of code in cwlrunner.
In singularity.py, we have the following:

and in docker.py, we have the following:

So, my question is what made the devs choose these two different way to launch the containers? Depending on whether the image has an entrypoint or not, it produces different outcome.