Showing only one category on portfolio page BUT filtering remaining categories with Isotope

You can just get the terms from the current query. To achieve this you can use wp_get_object_terms(), but it expects IDs, which we can extract by using wp_list_pluck() on the query objects posts property. It seems like you only need the names, which we can extract again with wp_list_pluck() from the result wp_get_object_terms() returns. Last but not least, the array returned might have duplicates, so we make it unique with array_unique(). In summary this would look somewhat along the lines of the following:

$args = array(
    'post_type'          => 'portfolio',
    'portfolio-category' => 'featured',
    'posts_per_page'     => -1 
);
$loop = new WP_Query( $args );

$loop_posts     = $loop->posts;
$loop_posts_ids = wp_list_pluck( $loop_posts, 'ID' );

$loop_term_objects          = wp_get_object_terms( $loop_posts_ids, 'portfolio-category' );
$loop_term_names_not_unique = wp_list_pluck( $loop_term_objects, 'name' );
$loop_term_names_unique     = array_unique( $loop_term_names_not_unique );

From there you can build your filter buttons for that specific query. Just remove the featured term from the array or skip the output for it in your foreach loop to not have it shown.


Edit:

Below some code for testing, or to be more exact, proof of concept for the method. It will return the term names on the post type post archive aka »Page for Posts« and single views of posts of the post type post – otherwise, on other pages, it returns empty. You can put this into your functions.php – you need PHP 5.3++, because of the anonymous function.

add_action( 'shutdown', function () {
    global $wp_query;
    echo '<pre>';
    foreach (
        array_unique(
            wp_list_pluck(
                wp_get_object_terms(
                    wp_list_pluck(
                        $wp_query->posts,
                        'ID'
                    ),
                    'category'
                ),
                'name'
            )
        ) as $term_name
    ) {
        print_r( $term_name . '<br>' );
    }
    echo '</pre>';
});