I have an absolute ton of above ground orienteering and have now been using dive compasses for a few years. While there are cheap compasses that have very low forgiveness to angle etc, a compass is a very simple instrument more likely to be affected by environmental factors than actual defectiveness. You don't explain the following:
1. Are you absolutly sure your compass is being held as close to level as possible (the cheaper ones get hun up if not level)
2. Are you diving near masses of metal that can affect the direction (even on your person).
3. THE BIG ONE... are you sure it is the compass or is it you? All people who use a compass follow one rule..trust the compass. In darkness or underwater most people want to go where their intuition takes them often thinking the compass has gone off. Take a bearing in something under water (from the surface) that you know is there for sure. Swim to it using the compass only and fight of all intuition that says you off course. Assuming you kinow how to use the compass, it should get you there.
Finally, accept my sincere apologies if I appear to be implying you can't use a compass. I am still one of those dummies and with all my experience it was only last weekend that I took a bearing on a point from the shore and by the time I was down 10 feet I was already thinking I was off course by a few degrees, corrected and missed my target. Did it over again, got the same intuition yet trusted the compass and found my target.