I believe we may be missing an else clause here for the case where `draft.has_children` is False.  If I'm correct, then we may have an xBlock leak.  
Specifically, when children are deleted (in draft) and the draft no longer has children (comes down to 0), then this cleanup logic will not get called.