Thought I had it beat but it keeps coming back.
One suggestion (from AppleCare and others) was that I had a corrupted contact somewhere. So I tried deleting all my contacts from the iPhone (kept them on my laptop only), planning to put them back, a few at a time until I identified the bad one. I didn't even get that far--I added one sample contact as a test, and it froze up immediately. So, probably not a corrupted contact.
It came back after I had disconnected everything--iPhone and laptop--completely from iCloud, so it doesn't seem to be an iCloud issue.
The "reset network settings" trick (above) didn't work for me, but the "Reset all settings" on that same screen did the trick, this time. It's faster than doing a full restore, but it's still a pain in the butt to put them all back the way they were.
AppleCare claims to have never heard of this problem (they should read their own message board). One tech suggested that it's just one of those things I'm going to have to with--yeah, that's not really an option. I was hoping maybe it had something to do with my 3GS being a couple of models old now--that maybe I'd leave it behind when I finally scrape together the cash for a new 4s. Hearing here that it's happening on a brand-new iPhone 4 is not encouraging.
So I can fix the problem temporarily by resetting all my settings, or with a restore (or two, or three), but it keeps coming back, and usually at the worst possible time, when I need my ****** contacts. You won't find many diehard iPhone fans as hooked as I am, but I am starting to wonder if I can keep using one, if one of the key functions is going to be this unreliable.