That's a tricky one. I don't have the answer. Digging into the JGit sources I come across the result code that triggers the thrown exception. Unfortunately it is not very helpful. My first guess was file system permissions, but you have checked that. Are you symlinking the directories in your ${repositoriesFolder} or storing them on a network share?
ObjectId insertUnpackedObject(tmp, id, false) {
...
// The object failed to be renamed into its proper
// location and it doesn't exist in the repository
// either. We really don't know what went wrong, so
// fail.
//
FileUtils.delete(tmp, FileUtils.RETRY);
return InsertLooseObjectResult.FAILURE;