it seems that the filter 'the_excerpt' gets called too late; i.e. when the filter 'the_excerpt' is called, the tags are already stripped from the content.
try to use the filter on 'get_the_excerpt' with a priority so that your function gets called before wp_trim_excerpt()
untested -
for some background, see /wp-includes/post-template.php lines 248++:
function the_excerpt() {
echo apply_filters('the_excerpt', get_the_excerpt());
}
and a few lines further down, lines 270++:
}
return apply_filters('get_the_excerpt', $output);
}
and /wp-includes/default-filters.php, lines 142++:
add_filter( 'the_excerpt', 'wptexturize' );
add_filter( 'the_excerpt', 'convert_smilies' );
add_filter( 'the_excerpt', 'convert_chars' );
add_filter( 'the_excerpt', 'wpautop' );
add_filter( 'the_excerpt', 'shortcode_unautop');
add_filter( 'get_the_excerpt', 'wp_trim_excerpt' );
and /wp-includes/formatting.php, lines 2028++:
function wp_trim_excerpt($text = '') {
and lines 2054++:
function wp_trim_words( $text, $num_words = 55, $more = null ) {
and lines 3035++:
function wp_strip_all_tags($string, $remove_breaks = false) {