This will amuse some of you.... I found the answer to my problem was that we hadn't actually answered the phone call! So when the IVR launched, it did a "pre-answer" (whatever that is) which seemed to work, but it wasn't very good at detecting DTMF. Putting an answer action in solved the problem.