In the Keyboard Shortcuts preference there are three different keys available for maximize: "Maximize window", "Unmaximize window", and "Toggle maximization state". For vertical and horizontal maximization, however, there is only one key available for each: "Maximize window vertically" and "Maximize window horizontally". If you are assigning a keyboard shortcut to maximization then it makes sense to assign it to the toggle function rather than the maximize function. Also, maximizing horizontally or vertically seems to make it forget how big the window was in that direction.
Single-direction "maximize" isn't a state, it's just a shortcut for resizing the window. Thus the behavior you see there. A deliberate decision though I don't remember all the details.
I thought as much. I think sawfish has a pair of states both of which the maximize button effects: sawfish's toggle-maximize function does something like 'if the both states are maximized then set both to unmaximized else set both to maximized'. I tried to implement this a while back but ISTR there were a lot of code paths that needed altering and other work eventually compelled me to drop it :-/
Upstream as http://bugzilla.gnome.org/show_bug.cgi?id=113601