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.