There's about a million subtle bugs that could cause that to happen. Everything from poorly written application code to poorly written library and OS code. Your drivers might not even fully support your hardware. It might even be that some application is expecting a different version of a DLL, so it ends up calling a function that doesn't even exist in the version you have.
However, the dialog means that some program, either in the foreground or the background, encounters one of those problems and faults. If it happens at startup, check the programs that Windows runs at startup* and then use the Ctrl-Alt-Del task manager to see what's missing after the dialog.
*Check the following registry keys (using RegEdit, they'll be on the left):
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ RunServices
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ RunOnce\Setup
They'll list programs that Windows always tries running whenever your computer starts up. If you decide to make changes, remember to be systematic and write down everything you do/remove.
On a related note, if you have the hardware, I really suggest upgrading to a newer OS with more robust memory management and shared library dependency checking.