One thing I forgot to mention.  When I was working on this originally, I found a plugin for celery that would defer the scheduling of a task until after the automatic commit.  This basically monkey patched django to add a post_commit signal.  While that would be an awesome thing to have in django proper, I don't want to rely on a third party shim that might not be actively maintained.