Depending on implementation, OMP can be quite useful to parallelize fairly arbitrary bits of code - e.g a parallel section inside a method that calls two independent methods - or it can be bad. It depends on how threads are created/cached, I think.
How does the VC++ 2008 implementation work? And is the 2010 implementation significantly different in terms of features and performance/flexibility?