After much digging it appears that other objects in the scene are rendering in front of the grease pencil's fill, but not the outline.
For example, i have a grease pencil (GP) drawing of a man in an arm chair, sat in a wooden cabin. The chair is in front of his lower half, and so correctly, the chair appears in front of the GP lines + fill. However, the back wall has some holes in it, and through the holes i can see that this is where the GP fill is rendering. I turned off the walls and tested putting a cube behind my GP drawing and the fill started rendering behind the cube.
The normal viewport displays the stroke + fill together, the issue only occurs when I snap to camera view, or render.
Left - normal viewport, cube behind GP. Right - Camera view, cube appearing in front of fill, but not the outline.
I have tried many things, including changing the stroke to 3D world location, remaking all of my materials, re-drawing with an empty grease pencil layer, discussing with chat-gpt. No luck. The issue persists across Eevee + cycles.
This all being said, when I open a new blender file + reset to defaults, grease pencil works as expected. I am aware that i could be mashing a load of shortcuts unknowingly. Resetting preferences to factory did not change anything.
Hope someone knows what's going on here, it has caused me no end of frustration