Assuming that your search block is inside the group block, you need to set the attribute via $processor->set_attribute( 'data-wp-interactive', 'wpse/local-search' ); inside your wpse_locals_filter_search function as well, since inner blocks are processed before the outer blocks (see line 11 below):
function wpse_locals_filter_search( $block_content, $block ) {
if ( isset( $block['attrs']['className'] ) && 'wpse-local-filter' === $block['attrs']['className'] ) {
$processor = new \WP_HTML_Tag_Processor( $block_content );
if ( $processor->next_tag( 'form' ) ) {
$processor->add_class( 'locals-filter-form' );
$processor->remove_attribute( 'action' );
$processor->remove_attribute( 'method' );
if ( $processor->next_tag( 'input' ) ) {
$processor->set_attribute( 'name', 'local' );
$processor->set_attribute( 'data-wp-interactive', 'wpse/local-search' );
$processor->set_attribute( 'data-wp-bind--value', 'state.search' );
$processor->set_attribute( 'data-wp-on--input', 'actions.handleSearch' );
}
$block_content = $processor->get_updated_html();
}
}
return $block_content;
}
add_filter( 'render_block_core/search', 'wpse_locals_filter_search', 10, 2 );