What language are you serving pages with? I know Python is prone to this a LOT as a side-effect of it timing out. Instead of returning the proper 408 it bombs during header sending.
Some C extensions for Apache (more often than not loaded via .htaccess instead of your .conf) can also cause this type of error.
Another possibility is the overuse of cookies increasing the header size to the point Apache just gives up on the page. This is quite common in https and is why when possible you should only use a dozen cookies instead of hundreds -- but that's very much implementation specific.
Also how is the connection load? Are you hammering the server with more connections than it can handle? How's the RAM usage?
What's your connection timeout limits on the server? Are your pages spending so long building the page from massive markup and/or database queries with some form of buffering (like PHP's OB_START) with no exit handler? You could have ended up sending headers before you start buffering then timing out during buffering, in which case only partial headers may end up sent. Some frameworks and CMS also suffer from bloat, sloppy coding, and inefficiencies that cause this type of problem (Django for example).
Even the code bloat and connection bloat caused by train wreck laundry lists of how NOT to build websites -- like bootcrap, overuse of jQuery, pretty much any front-end "framework" garbage -- can push the needle closer to this type of problem cropping up. . Things like CSR (which on top of possibly being accessibility trash depending on implementation, can also add 'requests for nothing' increasing the handshaking overhead) can also run you towards this particular cliff. No matter how many fanboys who know nothing about connection limits, handshaking, caching models, HTML, CSS, JavaScript, separation of concerns, etc, etc will make up lame excuses or stick their heads in the sand to go "wah wah, is teh notz!"
But of course I'm often called "hostile", "mean" or even "crazy" for DARING to even say that... How dare you sir!!! Yeah, well get off my playing field.
Some languages are also just not 'built' to output to the console or interact with apache directly in an efficient manner. I've seen these types of problems in Ruby, .NET, and Python where the only real answer was to either "well don't use that language" or to throw more hardware at the problem.
So often this type of stuff is a case of the old Groucho Marx joke "Doctor doctor, it hurts when I do this!"
What do your logs say, since that's a fatal error they should be in your Apache logs. (typically found at /var/log/apache2/error.log)
Are you able to replicate this using wget? IF you could SEE the partial headers that could tell us a lot as well -- though another good question would be "Is the browser complaining of receiving incomplete headers, or is the server complaining about it?" It SOUNDS like the latter, but if you could see the http headers in question that too could reveal what's going on.
There are a LOT of possible causes for this. Could we see the offending site in question? Even what's going on client-side on a successful page load could give some clues as to what's actually happening and/or contributing to the problem.