Thanks everyone for your responses. This was driving me crazy all day at work! It turns out the problem was the bobbin. I've been using metal class 66 bobbins from sew classic. I've been using them for at least a year with no issues. But I found a document on tandtrepair.com that says that as the bobbin case gets worn, the metal bobbins will ride too low and cause the upper thread to catch. The solution is to use plastic bobbins. So I tried one, and it worked! I'm getting perfect balanced stitches now. Still getting noise from the bobbin case rattling around so I'm going to check the hook for burrs when I have more time. But if the hook is ok then I guess I can live with it.