There's a 'fix_permissions' method in lysander which is run after repo creation, but sometimes it flukes out and the repo ends up without the proper permissions, yielding a 'Permission denied' error when people try to push over ssh.
Let's add some logging to lysander so we can tell when it goes wrong. My first thought was that had the permission and creating in seperate threads, but you don't. The disk and fs shouldn't be a problem here, unless mercurial does lazy backend writing (let's hope it doesn't).
Also you could insert a time.sleep(0.05) - if that fixes it, it's the disk/fs.