From the documentation
IMPORTANT: By default, WordPress will not recognize custom querystring variables used for rewrites. You must register your querystring variables with WordPress. Simply use add_rewrite_tag() to capture querystring variable values after a rewrite, or the above rewrite will not work!
I believe WordPress is not recognizing the "shareholder_name"
You need to do this
add_action( 'init', 'my_custom_rewrites' );
function my_custom_rewrites(){
add_rewrite_tag( '%shareholder_name%', '([^/]+)' );
add_rewrite_rule(
'our-firm/shareholders/([^/]+)/?',
'index.php?pagename=shareholders&shareholder_name=$matches[1]',
'top' );
}