orderby meta_value breaks taxonomy term archives

'meta_key' => 'keyname' must be part of the query to be able to sort by its value.
Unfortunately, that will immediately result in the query being limited to posts where the key is set (its value can be empty, but it must exist).

Hence, either consider the method s_ha_dum linked to in the question comments, or choose to do the sorting after the query.

Let me offer an approach to that (untested, just a concept):

function wpse105899_sort_posts_by_cis_sort_name( $a, $b ) {
    $a_cis_sort_name = get_post_meta( $a->ID, 'cis_sort_name', true );
    $b_cis_sort_name = get_post_meta( $b->ID, 'cis_sort_name', true );

    if ( $a_cis_sort_name === $b_cis_sort_name ) {
        return 0;
    } else if ( $a_cis_sort_name > $b_cis_sort_name ) {
        return 1;
    } else {
        return -1;
    }
}

usort( $query->posts, 'wpse105899_sort_posts_by_cis_sort_name' );

Note: The above format of the conditional in the usort callback serves the purpose of readability. In production, it can be a one-liner:

function wpse105899_sort_posts_by_cis_sort_name( $a, $b ) {
    $a_cis_sort_name = get_post_meta( $a->ID, 'cis_sort_name', true );
    $b_cis_sort_name = get_post_meta( $b->ID, 'cis_sort_name', true );

    return $a_cis_sort_name === $b_cis_sort_name ? 0 : ( $a_cis_sort_name > $b_cis_sort_name ) ? 1 : -1;
}