This requires a more thorough analysis of your environment. If you have Premier Support Agreement with MS, you may get lucky if they send to you a "real" performance guy, who will be able to identify the culprit and possibly provide a solution. Most of the time you may get a guy who will tell you that you need to redesign your app, or even better, - will start introducing various config changes and creat new registry keys. But you can do it differently, by starting to collect profiler traces yourself (make sure to send them to a network drive or to a local disk that does not contain anything related to your SQL). If it's SQL2K5 it's even easier, - turn on all deadlock-related events to ensure you capture all the participants. Once found, you may be able to isolate the issue to a pair of specific call, and then address them (reconstruct the data access order possibly).
"The data in a record depends on the Key to the record, the Whole Key, and
nothing but the Key, so help me Codd."