OK, I've found a (somewhat clumsy) workaround:
This is what happened:
I dragged a loop from the browser into the timeline to create a track.
The loop in this case was Louge Vibes 07.
In the track editor I shortened the loop as I only wanted to use the first few notes.
I then decieded I wanted to use the last few notes somewhere else in the same song.
In the loop browser, the loop played as it always did, in its original, unedited form.
But if I dragged the loop up to the timeline, it changed to the edited version.
I tried renaming the loops I'd already dragged to the song, but this changed nothing.
I then discovered that if I create a new song and drag the same loop into the timeline, it is unedited, ie, the full loop plays as in the browser preview.
I edited the loop to get the notes I wanted, copied it from the new song and pasted into the song I'd been having problems with. Lo and behold, the notes I want play, and the old edits are unaffected.
It's therefore clearly a problem within individual songs. The loops themselves are unaffected. I've posted this to the GarageBand team via the Feedback site, so hopefully it'll get sorted at some point in the future.