I hate to say it, but you have a perfectly valid point.
I hate to say it because it makes changing the license significantly more problematic than it seemingly was an hour or two ago. By changing the license, Facebook assumed rights to contributions that it does not have. Even if the licenses are _compatible_, releasing contributions under a different license is not allowed without permission from the contributors.
This is a change from a permissive open source license to another permissive open source license, but what if my GPL contributions to a project were released under BSD? Or what if they were released under a proprietary commercial license? In either case, I might not have contributed, and I should have the right to rescind my contribution to prevent it from being included under a new license.
It's an interesting quagmire, and one that FB's choice of license was destined to lead into at some point. I think it was a bad decision from the get-go.
This is not the first major licensing snafu. A lot of projects ran into similar issues trying to adopt GPLv3 when it first came about. And I have seen a few other projects deal with community uprisings as other license changes came about.
Personally, I think FB should adopt the combined apache/GPL license, adopt CLA language like you've stated, and provide notice that developers can rescind contributions if they don't agree. Perhaps do a tri-license of Apache/GPL/BSD if there's significant kickback. Their current license is a problem and too much of a continuing distraction. JMO.