Split the content of the_content();

I am guessing, at least partially, but it sounds like the FaceBook content is loaded as a filter on the_content, which you run on both blocks of content.

The quick fix, keeping most of your code intact, would be to remove the FaceBook filter for the first array, then put it back for the second.

$csize = count($content);
remove_filter('the_content','fb-filter-name');
for($c = 0; $c < $csize; $c++) {
    // Note: this conditional may not be quite right
    // I'd have to test it to make sure it fires at the right time
    if ($csize === $c) add_filter('the_content','fb-filter-name');
    $content[$c] = apply_filters('the_content', $content[$c]);
}

However, you are going to have trouble with any filter that inserts content so that is by far not the best way to do this. You will end up having to remove and add back any filters that cause trouble. You’d be better to move most of your code into the function, create a string and run the the_content filter on the whole thing.

// split content at the more tag and return an array
function split_content() {
    global $more;
    $more = true;
    $content = preg_split('/<span id="more-\d+"><\/span>/i', get_the_content('more'));
    // first content section in column1
    $ret="<div id="column1">". array_shift($content). '</div>';
    // remaining content sections in column2
    if (!empty($content)) $ret .= '<div id="column2">'. implode($content). '</div>';
    return apply_filters('the_content', $ret);
}

Completely untested and possibly buggy, but that is the idea.

This won’t work well if it is intended to be portable– that is, used by more than one theme– since it requires a theme edit. So be aware. But if it is just for you it should be fine.