OS-level processes are very expensive (and the OS themselves may set quite harsh limits on e.g. the number of processes you can have[0]) leading to lower flexibility.
Furthermore, process-based IPC tends to be untyped (unless you're willing to pay for the price of serialization and deserialization of higher-level structures).
Finally, the ability to link processes together and react to events (mostly death) of unrelated processes (no SIGCHLD and no SIGHUP) are limited.
[0] it defaults to 532 on a non-server Snow Leopard system, for instance...
They're not 300-bytes cheap. They're not you-can-have-a-million-of-them-on-a-desktop-box cheap.
Erlang's processes are.
After all, there's nothing to stop you from implementing this in Python right now with thread-local storage, and I'm sure you could achieve the same effect with other languages if you don't like the idea of the GIL or slow interpreted languages.