Yes, I've had the same problem. Basically the grease pencil won't zero to a surface, not without the z-depth intersecting with it on render. As you say it looks fine in the viewport. It's also dependant on camera distance, close up is better but further away the grease pencil lines start to break up, fills are even worse for this than strokes.
The only practical work arounds:
I found are drawing the grease pencil strokes/fills around 0.025 to 0.03 away from the mesh surface. One method is to solidify the mesh and drawing on that and disable this modifier on the render. However line art will sit slightly proud from the surface.
Either use the freestyle and edge mark the mesh, or use the line art modifier to project the grease pencil to the mesh, and again edge mark the seams you want to include.
turn off Z data Passes under View layer properties, this will make all the stokes render fine, however this will show through any strokes and fills from the opposite side of the mesh.