I'm investigating a problem that's kind of similar to this. Maybe you've already done this but I would suggest looking at a trace.
We have a front end that throws a really poorly performing query at the sql server every 15 seconds. That query gets parallelized and (since we have MAXDOP set at 0) hogs all of the available cpus. Any other queries that come in while that one is running have to wait.
You might have a similar situation. Lowering MAXDOP might lower the signal wait percentage. But if the poorly performing query is also creating locks, it will also extend those locks. That's kind of my dilemma.