Finally figured it out. As I thought I did need a UV map with a unique name, and assigning it to the bake is different from assigning it to the mesh; I had to select the target Normal texture in the Shading tree, go into Texture Locator under Properties, and assign the UV to the texture there.
Okay, I think the issue may be with the UV map. At some point I seem to have screwed up and failed to give it a unique name. So I remade the UV with a unique name, but despite assigning the new UV to the low and high res in the List panel, it still keeps trying to bake with the old UV. I can't stop it.