Why is this happening? Is my save somehow keeping stat data for all the enemies I've met so far?
Yes, once an actor is generated in-game, changes to the Actor record in the CK won't have any effect.
The created actor becomes an ObjectReference once it is created, and all of its attributes are stored in your save as long as that actor is persistent.
Not really, you would have to delete the actor and create a new one via script.
Yes, that should work. If you use PlaceAtMe it should be using the new values as you have modified them.
That's odd, then.
I've tried using getav speedmult to get a better picture of what's going on, and if I spawn a troll right after starting a fresh game, it returns 175, which is the current value that my test mod is editing it to. If I do the same after loading a save, then it comes out as 100.
I can manually edit the speed using setav speedmult and it works as expected provided I disable and enable the actor after changing the speed, but that only seems to affect the current actor; subsequent spawned trolls will still have speed set to 100. I can only assume that the save is storing a template to generate new enemies with?
Yeah, you probably want to investigate that further. Sounds pretty odd - if your plugin has successfully edited the actor record, it should definitely be giving you the new values. You could try editing something else too to see if it works (like the name of the troll actor or something more obvious).