How to prevent all UPPERCASE body text?
Converting the post to all lower case would be pretty simple; you can implement your own filter like so:

function MYMODULE_filter_info() {
  $filter['allcaps_filter'] = array(
    'title' =&gt; t('Disallow ALL CAPS posts'),
    'description' =&gt; t('Rudimentary filter which converts all text to lowercase'),
    'process callback' =&gt; 'MYMODULE_allcaps_filter_process'
  );

  return $filter;
}

function MYMODULE_allcaps_filter_process($text) {
  // Attempt to make the first letter of the first word uppercase. This is very
  // likely to fail as the inputted string will probably be HTML.
  return ucfirst(strtolower($text));
}


Once you clear the caches you'll be able to add that filter to any text format you want.

It's worth noting that the description rudimentary in the comments is very, very apt...for example this will also convert any HTML attributes/tags to lowercase which might break embedded image paths etc. It might provide a good place to start though.

Constructing more naturally cased alternatives is going to be very tricky, mainly because you haven't just got text in there...you've got HTML as well. I can't think of a decent way to do this at the moment to be honest, short of importing the string into a DOMDocument and looping through every element, converting the text in chunks as you go.

I'd provide an example for that but I think you've got one ;)