As the weeks have gone on nothing has been quite as depressing in all this as the false hope some of these solutions have been giving me, since none of them have worked.
So at the risk of sending you all on another wild goose chase, this finally worked for me.
(It makes no sense, clearly this is a strange bug.)
I was trying to sync "selected playlists and artists" only and I also have "Sync only ticked songs and videos" checked as well. The sync would go so far and then cancel on one of the many songs by my favourite band I have in iTunes. The offending artist was in a smart playlist (everything by them) and I'd also checked their name in the iTunes/iPhone/Music tab. Belt and braces, I know.
So I unchecked all the songs by them in iTunes.
I also deselected their artist name in the iTunes/iPhone/Music tab, but left the smart playlist. Since I'd unchecked all their songs I saw no point in deleting it.
The phone synced OK, AND copied all the songs by this artist, despite the fact they were uncehcked and it shouldn't have copied them at all.
Hmm.
Maybe that's where the bug is, in that bit of code? iOS 5 doesn't like checks.
Anyway, suffice to say I will be listening to one artist only in the car today!