Optimizations can make quite a difference, even changing the target can affect the size. i386 doesn't really care about alignment whereas i686 does, so the binary will be bigger.
Optimizations, especially extreme, can show flaws in compilers as well.
If it is just a recompiled DLL causing this problem on your system, ideally would be to experiment and find out exactly which optimization is causing the problem.
Looking at the makefile, there can be a debug build or release build. The debug build will be larger due to the debug info and usually the debug build has less optimizations as optimizations can be hard to follow in a debugger.
From the makefile,
# /b2=os2: compile for os/2
80 # /s: remove stack checks (crashes)
81 # /wx: all warnings
82 # /zq: quiet
83 # /od: Disable optimisation
84 # /d2: full debug info
85 # /zld: don't include autodependency info
86
87 !ifdef DEBUG
88 MODE_CFLAGS=/od /d2 /dDEBUG /hd
89 !endif
90
91 CFLAGS=/bt=os2 /s /wx /zq $(MODE_CFLAGS)
So just the default optimizations for release. I don't know OW enough to know what they are and looking quickly, can't find anything. Usually you have to invoke optimizations and the docs show lots.