I've seen this bug before and I don't know what made it go away in the past. I have a test server that has three jobs that each kick off their own SSIS package. In production this works fine and there are only ever three ISServerExec processes in Task Manager, but on this one test server the number just goes up and up until it runs out of RAM. When I look at the Integration Services Reports it shows that each job is getting kicked off again before it finishes running. I'm on SQL Server 12.0.5000.0.
I found the fix but I can't explain what changed to make the fix necessary. I added the "SYNCHRONIZED" parameter to the package parameters of the Agent job step and then the job acted normally, waiting for the package to finish and marking the job as successful only when it actually was.