Why is overwriting $GLOBALS killing the_content()?

Template tags like the_content() and the_title() are dependent on the global $post variable ($GLOBALS['post']).

See the source code for get_post(), which get_the_title(), for example, uses to get the current post so it can get its title:

function get_post( $post = null, $output = OBJECT, $filter="raw" ) {
    if ( empty( $post ) && isset( $GLOBALS['post'] ) )
        $post = $GLOBALS['post'];

WordPress is heavily dependent on global variables. See this codex article on the global variables. You really shouldn’t be overwriting it entirely or you’ll break more than just template tags. I’m surprised you made it this far, honestly.