Also you pass the data a job needs to run as part of the job payload. Then you don't have the "data doesn't exist" issue.
Passing around the job's data separately means that now you're storing two copies, which means you're creating a point where things can get out of sync.
Agreed. Which is why the design doesn't make any sense. Because in the scenario presented they're starting a job during a transaction.
Personally, I need long running jobs.