Turns out the issue was that I was using Longhorn wrong. A single PersistentVolumeClaim, plus a deployment seems to have resolved the issue.
I had though I needed multiple volume claims which is why I used a statefulset with a volume claim template at first. But that doesn’t work. Longhorn replicates data within a single volume, not multiple like I had with my statefulset.
If you use a single PVC and a deployment, Longhorn makes sure to attach things correctly. At least I think. I’m still figuring all this out, so don’t take my word for it.