As far as I know, the only difference between the two matrix modes are the order in which they’re multiplied (which does make a difference). Other than that, there should be no difference between the two.
The fixed-function pipeline maintains multiple matrix stacks. Among them are the ModelView and the Projection stack. The difference between glMatrixMode(GL_MODELVIEW) and glMatrixMode(GL_PROJECTION) is simply that you’re operating on either the ModelView or the Projection stack, depending on which of the above function calls was made. In general, it is NOT advisable to manipulate the projection matrix stack if you don’t intend to really change the projection matrix. Most of the the time you’ll want to modify the modelview stack.
I can’t tell why you get the same results in your example as I didn’t look at the math involved. Still, it should be merely coincidence and you CANNOT rely that!
Edit: BTW, if you say you’re using core profile code as much as possible, you might have a certain misunderstanding what “core profile” means - what it definitely doesn’t involve is using ANY fixed functionality like the matrix stacks and matrix manipulation functions.
In the fixed function pipeline (note: outdated) all your vertices are projected like this:
P_transformed = M_projection * M_modelview * P;
M_projection is set by matrix manipulating calls in matrixmode GL_PROJECTION (e.g. LoadIdentity, transform, etc.), M_modelview in matrixmode GL_MODELVIEW. Default is the identity matrix. That’s why you don’t see a difference now. You would see errors in your lighting when you use the matices wrong.
Are you sure, you really want to learn the fixed function pipeline?