Creeder,
I don't know about guide lines, but...
Encapsulate as much of your solution as possible hopefully ALL OF IT, into classes that have nothing to do with COM. Then these classes can be used to build a 'normal' application in whatever language you are working with. This provides simple IDE debugging capabilities for 99% of your controls functionality.
Then you start your COM project and insert the classes into it and wrap them in the COM code. The COM code then serves as a thin layer to pass parameters to/from the classes you already built.
This technique does not solve all of the problems associated with COM development but it at least reduces them to the essence of COM and not 'your code'.
"But, that's just my opinion... I could be wrong".
-pete