OK, I tracked down the bit in index-pack that handles multiple thin deltas against the same base. It correctly inserts the base object into the final pack only once. It's possible that there was a bug, but I can't find anything in the history (nor do I remember any such fix since 2010). So that's probably not what happened.

That leaves a client sending us a packfile with duplicate objects. But you shouldn't be able to convince git to do that; `pack-objects` will remove duplicates, even when run in "no seriously, here's the list of objects to pack, don't do any traversal" mode. Again ,it could be a bug, but I don't recall any such bug on the list. Could be another implementation, perhaps? libgit2 did not do packing in 2010. I don't think Grit ever did packing.  Could be dulwich or JGit, I suppose. I'll ask around.