Requested URL changes when using custom rewrite rule

this:

add_rewrite_rule(
    'membership/member-profile/([^/]+)/?$',
    'index.php?pagename=member-profile&profile=$matches[1]',
    'top' );

should be:

add_rewrite_rule(
    'membership/member-profile/([^/]+)/?$',
    'index.php?pagename=membership/member-profile&profile=$matches[1]',
    'top' );

the difference is pagename should contain the parent/child path.

also- if profile isn’t a recognized query var, it needs to be added in order to be accessed:

function wpse47596_query_vars( $query_vars ){
    $query_vars[] = 'profile';
    return $query_vars;
}
add_filter( 'query_vars', 'wpse47596_query_vars' );