I just found a new command to me. I suspect it's been in Civil 3D for a while. While it doesn't solve the issue of things being in the wrong draw order, it does provide a way to quickly put things in the correct draw order by layer. The command is called aeclayerorder (LayerOrder also works) and is an AutoCAD Architecture command. Civil 3D is built on top of AutoCAD Architecture so it has the command.
Here is the help file of the command:
Essentially type aeclayerorder at the command line and then order the layers in the list to the desired order. The layers you want to be on the bottom go to the bottom of the list. Then pressing OK will reset the draw order of objects. So easy to control draw order by layers!
Before, hatch is in front of line:
After, hatch is behind line:
Once the layers are ordered it takes like 3 clicks to get everything back in order.