I quickly finished off level 5 with a few more platforming elements and a level gate, and moved on to level 6. I noticed a few things with this. The duplicate level 2s still had all their level blueprints set up to display the Nueva Venicia intro text, and to respawn at any level 2 checkpoints that are still saved. They also all had the same NPC placements, but without the nav mesh, but I wasn't really bothered about that for the future levels, as long as this one, that starts at the end of the same traversable section of level 2, was the same.
At this point I also realised that the player hadn't learned the Colossal Jump yet, so level 5 was probably too difficult currently. I resolved to go back and check once level 6 was in order.
Level 6 was going very well, but for some reason it wasn't respawning the character back at the checkpoints, instead just putting them right back to the start of level 6 (which told me it wasn't necessarily because the game was treating it like level 2 still. I double checked the player and level blueprints and couldn't find anything wrong, so I checked the level blueprint against one that was working properly, and they were identical except for the name of the checkpoint. I checked the save game folder and there was a C6 there, so at this point I had no idea why it wasn't respawning me at a checkpoint, although I did notice that there was an item spawner inside the checkpoint, and remembered that caused an issue with the first level at one point, so I moved that out of the way.
And for whatever reason, that worked.
However, after adding another checkpoint, the level failed to save. But then I noticed that the window I'd opened to test the game and thought I closed was still open. The level autosaved as soon as I closed the game.
I finished off the rest of level 6 with no further complications, added a navmesh to the second building cluster as well as filling out the NPCs that had got deleted, and dropped a level gate to the end of the accessible area. I tested it and found that the last checkpoint was saving but not loading as well, so I spent a while tweaking and testing that. In the end, it turned out there was a space after the checkpoint name meaning it was saving under the wrong file name.