I suspect the problem is that your COM object changed identity when you recompiled it. The COM object your client was trying to connect to no longer existed and a new apparently completely different COM object existed in its place - but your client didn't know anything about that new COM object.
In VB 6 this sort of problem was addressed using the Version Compatibility project property.
By default a managed code COM object's CLSID is generated based on a hash of the class name and the identity of the assembly the class is in. Also by default the AssemblyVersion attribute is set to a wildcard string (like "1.0.*").
A wild-carded AssemblyVersion attribute will cause the AssemblyVersion to change when the project is built (different languages handle wild cards differently but all of them change the assembly versionat one time or another) This causes the assembly's identity to change which in turn causes the generated CLSID to be different.
One solution would be to change the AssemblyVersion attribute to get rid of the wild-card. I'd suggest you do that anyway so you have explicit control of your Assembly version but I don't like it as a solution to your current problem.
Another solution would be to use the ComCompatibleVersionAttribute to indicate to .NET that the CLSIDs should be forced to the values generated by an earlier build. This is much like using the Version Compatibility project property in VB 6. http://msdn2.microsoft.com/en-us/library/system.runtime.interopservices.comcompatibleversionattribute.aspx
This solution is better than just fixing Assembly Version but still not ideal. Things can go unexpectedly wrong if the build can't find the old values for some reason.
A third (and, I think, most attractive) solution is to explicitly specify the CLSID in your source by decorating your COM class (or classes) with the GuidAttribute and a GUID generated specifically for the class. You can use Tools | Create GUID to generate a guid for each class that needs one. http://msdn2.microsoft.com/en-us/library/system.runtime.interopservices.guidattribute(VS.80).aspx
This last approach makes everything explicit and has the added advantage that someone reading the code can tell what CLSID your class uses instead of having to dig through type libraries and registration to find out what the generated CLSID value was.
As an aside, if you are going to do a lot of COM work in managed code I suggest you get hold of a book called ".NET and COM, The Complete Interoperability Guide" by Adam Nathan. http://www.amazon.com/gp/product/067232170X/ref=pd_bbs_2/103-3935986-9004648