Compile and drop" is not a valid deployment technique. Your VB6 program will try to register any unregistered OCX or DLL it tries to use if it can trip over it via DLL Search. Usually this occurs when the DLL in question is placed "next to" the EXE (i.e. in the same folder). This can lead to breakage of other programs on the same machine that use these same components, and thus it is almost always a bad idea to put component libraries in the same folder as code that uses them.
Using a proper installer or registration-free COM will help avoid this form of DLL Hell.
Never use Win2K-style .EXE.LOCAL files. They are deprecated for good reasons, and were never meant to be used by a program consuming component libraries compiled with VB. VB 5/6 cannot create the proper self-registration entrypoint logic for use with the .LOCAL technique.
DLL/COM Redirection
Note In Visual Basic there is currently no easy way for developers to write inherently side-by-side ActiveX controls. This is because the registration of Visual Basic-authored ActiveX controls writes the fully qualified path to the OCX file into the registry when the control is registered.
"Currently" was a hopeful qualifier, but since we never got a real VB7 this will never be addressed. In any case we have reg-free COM now, which is much cleaner anyway.
Your main problem is probably a failure to maintain COM interface ("binary") compatibility though. You are probably letting VB generate new class ID values every time you compile these DLLs/OCXs even when there has not been a change in the interface.
You will find binary compatibility documented in the VB6 Component Tools Guide under
Version Compatibility in ActiveX Components.
In the short term you might try carefully unregistering your component libraries on the server that has a problem. This may well require manual registry cleaning, a tedious process to be sure if you have no record of the different class IDs (GUID/UUIDs) you used.