Generally, all the os2.h headers should be equivalent. In practice the toolkit os2.h is the most up to date and preferred, though in a lot of cases the other os2.h work just as well.
Different compilers are different, and while icc and OW can directly use the toolkit and it is preferred, GCC's os2.h starts out by including os2safe.h which is needed for redefining various 16 bit functions that will crash if using high memory, -Zhigh-mem. If you look at the GCC version, it can be edited to use the toolkit os2.h after setting a few things up, mostly calling conventions or a program can use a define to use the toolkit.
So in the case of GCC, you should use the os2.h in usr\include which can include the toolkit one, which it also has to find, so you need to use the right -I or %C_INCLUDE_PATH% to find it.
Remember too that up till eCS (or the convenience packs?), the toolkit was not freely available so you had to use the ones that came with the compiler.