Figured it out. I just needed to be using $_SERVER[‘HTTP_REFERER’] instead:
//Modify password reset message and include redirect to referring page
add_filter( 'retrieve_password_message', 'collab_retrieve_password_message', 10, 4 );
function collab_retrieve_password_message( $message, $key, $user_login, $user_data ) {
$site_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
$message = __( 'Someone has requested a password reset for the following account:' ) . "\r\n\r\n";
$message .= sprintf( __( 'Site Name: %s' ), $site_name ) . "\r\n\r\n";
$message .= sprintf( __( 'Username: %s' ), $user_login ) . "\r\n\r\n";
$message .= __( 'If this was a mistake, you can simply ignore this email and your password will remain unchanged.' ) . "\r\n\r\n";
$message .= __( 'To reset your password, visit the following address:' ) . "\r\n\r\n";
$parts = parse_url($_SERVER['HTTP_REFERER']);
parse_str($parts['query'], $query);
$redirect = $query['redirect'];
//$message .= $redirect . "\r\n\r\n";
$message .= '<' . home_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user_login ) . "&redirect_to=" . $redirect) . ">\r\n";
return $message;
}