glPushMatrix() copies matrix at the top of the stack an sets it as a new top. After execution of glPushMatrix() the same matrix is on the top and below it. The following commands modify only matrix at the top. After you finish whatever you want, just call glPopMatrix() to remove top matrix, and you are at the state you’ve been before (without need to recalculate previous). This mechanism is used for hierarchical modeling, but can be useful also for changing a projection matrix.
The pixel zoom factors are not affected by ModelView or Projection matrix. They are set by glPixelZoom() function. But geometric transformations are affected. To restore previous state (saved with glPushMatrix() call), just call glPopMatrix(). Please, distinguish pixels from vertices.
I sincerely recommend the OpenGL Programming Guide, or some similar book. It is worth having such a book.