add_action pre_term_description vs. pre_category_description

Categories and tags are both terms, which is why your code is running twice.

What you need to is use the second argument passed to the callbacks for the pre_term_description hook, which tells you the taxonomy the filter is currently being applied for:

function wpse_321166_default_term_description( $description, $taxonomy ) {
    if ( $description ) {
        return $description;
    }

    switch ( $taxonomy ) {
        case 'category':
            $description = 'Setting category description';
            break;
        case 'post_tag':
            $description = 'Setting tag description';
            break;
    }

    return $description;
}
add_action( 'pre_term_description', 'wpse_321166_default_term_description', 10, 2);

The documentation for the hook was a bit hard to fund, because it’s got a variable name, but you can see how the taxonomy parameter is available here.