I figured this out after much trial and error. Made some slight changes to the $new_post array.
else if( !$error_msg && 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == "new_post"){
$new_post = array(
'post_title' => $title,
'post_content' => $description,
'post_category' => array($_POST['cat']), // Usable for custom taxonomies too
'tags_input' => array($tags),
'tax_input' => array('closed_schools' => $_POST['terms'], 'study_open' => $_POST['terms'], 'safe_arrival' => $_POST['safe_arrival'], 'hour_delay' => $_POST['hour_delay']), //Place all of our custom taxonomies into the posted variable terms as an array
'post_status' => 'publish', // Choose: publish, preview, future, draft, etc.
'post_type' => 'post', //'post',page' or use a custom post type if you want to
);
Also to use wp_set_object_terms instead of wp_set_post_terms on each custom taxonomy
//SET OUR POST TERMS, CUSTOM TAXONOMIES
wp_set_object_terms($pid, $_POST['terms'], 'closed_schools');
wp_set_object_terms($pid, $_POST['terms'], 'study_open');
wp_set_object_terms($pid, $_POST['terms'], 'safe_arrival');
wp_set_object_terms($pid, $_POST['terms'], 'hour_delay');