Milo provided the answer in the comments above. I’m recording for posterity sake. 🙂
I was using add_query_arg and should instead have used return $url, so the code above should have looked like:
function lqd_message_link( $url, $post ) {
global $wp_query;
if ( get_post_type( $post ) == 'gc-sermons' && isset( $wp_query->query_vars['messages-app-view'] ) ) {
return $url . 'messages-app-view/';
}
return $url;
}
add_filter( 'post_type_link', 'lqd_message_link', 10, 2);