This is an excellent question. Yes, indeed, Windows 2000 can run in 32M when optimized (redundant services disabled).
My explanation, which is of an end user one and not an expert one is:
It is no fault of TinyCore, but of the fact that everything is bloated nowadays. Windows 2000 was from the last days of memory efficiency. TinyCore is built on Linux kernel and every little app you load after that appears to require those bloated libraries and other baggage with loads of redundant code unrelated to what you want to do. Linux (normal distributions) is going the path of the bloat that equals or exceed MS Windows, which is a pity. Such as Tiny Core and SliTaz try to make it as small and efficient as possible.
There is another Linux that goes still further in efficiency... It is Kolibri, written completely in Assembler, taking 4M including a bunch of applications and desktop and runs in 16M memory, because it is in Assembler. It is excellent and looks nice, but development cycle appears to be very slow, apparently not many programmers out there can code in Assembler anymore...