A: 

This might not be it but I see that you use $node as an object at first (title) and then as an array (to get the language) in the make_author_form() method. If $node is an object, then that explains why you cant retrieve $node['language'].

Not sure if I completely understand what you are trying to do but it would be a good idea to use page arguments for it, I think.

function mymodule_form_alter($form_id, &$form) {
  // If $form_id is {node->type}_node_form
  // Then, check for the first argument in the URL and hide/show Preview accordingly
}
Amar Ravikumar
That wasn't a bad idea but not the problem. That was cruft that built up from rewriting that particular piece of code over and over.
ElectronicBlacksmith
A: 

Turned out to be a basic programming error in line 4 of the make_author_form function. I was zeroing out the $node variable myself.

ElectronicBlacksmith