dmd seems to have undergone changes concerning the linking of 32bit binaries. This has yet to be confirmed, but I tested a bit with v2.103.1-dirty.
dmd seems now even with --arch=x86 build 32bitmscoff-builds. Optlink doesn't understand these, so lld-link is used, which is also the linker for ldc.
For reference:
https://dlang.org/changelog/2.086.0.html#dmd-mscoff-default (dub --arch=x86 still uses optlink (-m32 switch for dmd compiler))
https://dlang.org/changelog/2.099.0.html#fix18964 (-m32 now builds 32bitmscoff)
https://forum.dlang.org/post/pvckfcxxntzwzfubkeze@forum.dlang.org (forum topic about incompatibility mscoff and optlink)
Should it turn out to be the case, that dmd now uses lld-link for 32bit by default like ldc as well, then the build notes need to be rewritten. Especially the provided libraries have to be unified to the ldc ones. The dmd ones for 32bit (for the needs of optlink) are then not relevant anymore. Furthermore dub.json has to be adjusted, so that the line '"lflags-windows-x86-dmd": ["-L/subsystem:windows"],' is removed and the flag for 64bit dmd build is used generally for dmd. Maybe no distinction between dmd and ldc is needed anymore.