What is the preferred method of marshalling COM interfaces across threads?
From MSDN:
If you are unmarshaling an interface pointer multiple times between apartments in a process, you might use the IGlobalInterfaceTable interface. With other techniques, you would have to remarshal each time.
Besides that, I would say it's mostly a matter of preference.
You need a copy of Essential COM by Bon Box, when I used to work with COM, I would reach for Don's book whenever I had this sort of question.