You also need to retry some subjobs (the GUI does this automagically for you); there are probably no subjobs in a pending state to render the retried frames. Do a qb.jobinfo(id=123, subjobs=True)
and get the list of subjobs and count up how many are running - check the 'state' (in case the job is still actually running). If you decide there aren't enough running subjobs (or there are none), decide how many of the subjobs you want to retry.
Then do qb.retry('123.0', '123.1')
to restart the subjobs.
Make sure you retry the subjobs after you retry the frames, otherwise the subjobs might start up, query the supervisor for work, told there's no work, and go complete again. You might even consider putting 1-second sleep between the work and subjob retries.