The coverage tool that I was using was EclEmma. After reading around and experimenting a little, I was certain that EMMA can't handle the instrumentation that the JDO post-compilation step does to the classes.
This is the kind of result I was getting with the EclEmma plugin:
As soon as I switched to the eCobertura plugin, my code coverage for the same class went to 100%.
There are some drawbacks of using eCobertura, it doesn't feel as mature and doesn't have as nice an interface or configuration screens, it's also noticeably slower. However, despite all of these, I am going to stick with it because it gives me accurate results.