Several answers contradict each other, so I wanted to make another answer to pull together some of the ideas that seem (to me) to be the root behavior of zoom failures:
The zoom feature that many used reliably in Snow Leopard breaks often in Lion. It generally works perfectly immediately after a reboot. A quick sleep / wake cycle after a reboot isn't the only thing needed to break this, but it appears to fail after longer periods of sleep.
When migrating from Snow Leopard to Lion - the migration is breaking the settings for people that had the zoom enabled. By "break" - the panel shows zoom off (or greyed out) even if it was previously on for Snow Leopard. Strangely, the system will zoom when the panel shows zoom off in this case of a migration.
Once zoom is "broken" a reboot will make it work again temporarily - it recovers from the failure, but doesn't prevent it from recurring again. The new zoom in window feature seems to work reliably - the window zooming will work when normal zooming is broken - you can turn that on to nudge the zooming without a reboot.
All of the above are "facts" that I've seen and reproduced on more than one Mac as well as seen more than one time on each mac that has had the problem.
My speculation is the new window zoom features (which are amazingly cool) is causing the tried and true older zoom function to have problems as the machine runs and some process crashes or some memory gets corrupted. Switching to Zoom in window or rebooting clears up this corruption or restarts whatever process needs serves the zooming temporarily.
My primary mac seems to fail to zoom somewhere between 8 hours into a boot and almost certainly after a day or two of use. I haven't tested a log out / log in to clear things up (yet) - but it's a near certainty it will be back within 48 hours for me to poke at it some more and see if I can see what is crashing...
There may be a link between using the default Control ^ key as the zoom modifier - the preference pane for choosing that modifier seems "screwy" to me in that it will substitute values for control when I go to look at the pane. I haven't determined if my preference file is corrupt or the system code is just mis-behaving whether or not the preference file is correct or not.