Lee, I'd add a gc call into that loop just to be on the safe side with the selection set restrictions.
@econnerly: BTW, not too sure about the "basepoint" around which to scale. Do you mean as per Lee's code (select a group, pick a base point, lisp does it's job, then repeat for next group)? Or should all text be scaled around their insertion points & all lines around their midpoints (or some other)?
Sorry, probably stupid question - but I'm not enlightened from your posts.