Thanks all for the input. I did a process of elimination with a cwp which was at 35 MB by deleting each track in turn until I found the culprit - it was a lead vocal track which had been put through Melodyne - but not directly. There is a bug apparently in Sonar where Melodyne doesn't get rendered to a final mix if Fast Bounce is on.
As it takes far too long to wait for mixes to render in real time, my process was to move any vocal bits which needed processing to a dedicated Melodyne track, work on it, then track bounce it back onto the lead vocal track (without Fast Bounce). My lead vocal track then ended up with multiple clips, consisting of raw lead vocal and lead vocal which had been put through Melodyne and track bounced. In my process of elimination, each time I deleted a clip which had been track bounced, the size of the subsequently saved cwp dropped dramatically.
I restored all the clips, confirmed that the saved file size went back up after a save, then clip bounced all the clips on the vocal track to a single clip, saved the file, and hey presto, a tiny cwp!
It's interesting that this issue (bug?) compounds itself each time a cwp is saved, even though nothing has changed on the track in question. Whatever extraneous data is being saved to the cwp is saved additionally every time a save is carried out after loading the cwp.
What I haven't established yet is whether it's the bounce to track process itself which caused the problem, or the fact that it was done with Melodyne on the track which caused the issue. I'll try and establish that and post back here when I get a few minutes.
Thanks again!