So, if I understand this correctly, a contributor agreement is not really necessary with copyleft, because the simple act of contributing (which is distributing) would mean that it's at the very least contributed back under a compatible license, or at least, not under some more restrictive one. And for a project using a BSD-style license, an agreement can help clarify what is going on. That's also why you have to make the license of your contribution perpetual and permanent, so that someone can't go and rescind the license to the project later, saying that everyone using that project's software owes him money for a license.
I agree with your assessment, and while a a copyleft proponent might say that this is a clear sign that one should always go with a copyleft license, but for someone who just wants to get code out there with a BSD-style license, does it make sense to use a CLA? Is there some trap, for either party? If so, can they be fixed?
After that, maybe the OO.o or Canonical CLAs aren't good, but I'd like this to be constructive, and see what we can learn.