I would like to understand if these two words
are actually perfectly equivalent or if they differ in some way.
Given that I know that morgen also means tomorrow.
I was tempted to close this question as off-topic for being general reference, but I realized that the definitions provided by Wiktionary and Duden are kinda different.
Wiktionary says that Morgen is the time between night and Vormittag. Duden includes the early Vormittag as part of the Morgen.
Interestingly enough, both sources agree when it comes to the definition of Vormittag:
My personal view is that Morgen does not include Vormittag.
That leaves us with the question when is the Morgen over, and when does the Vormittag starts?
Well, you can't really answer this question. Opinions differ. But around 10 o'clock is a good approximation.
This is an issue that frequently crops up when Germans interact with non-natives.
English speakers will usually say or begin their emails with "Good morning" until noon. If they promise to so something "tomorrow morning" without specifying the precise time, it's usually understood that they will do so sometime before noon.
Morning is from getting up until noon, basically.
Not so in German.
"Guten Morgen" usually is used as a greeting from the moment of getting up until about 10 a.m. (note, however, that due to varying working hours etc. this may vary considerably).
After that, Germans use their preferred daytime greeting.
Vormittag is not used as a greeting.
When Germans say that they'll call you "am Morgen", you can reasonably expect a call by about 9 a.m. When they say "am Vormittag", it can be anytime before noon.
Note that this is an approximation, since there are no official rules on this. Also, timespans may overlap.
To break it down to the common denominator:
Morgen is the time after getting up and the first part of a normal workday.
Vormittag is the time before noon.
It's the mirror image of what happens once noon is over: There's some time to kill until evening - and that time is usually called afternoon - Nachmittag in German. The cusp between Nachmittag and Abend is more or less the same as in English.
IMHO, the difference is explained best by stating that you eat breakfast morgens and eat brunch vormittags.