Apparently after 2 days of trying to sort this out, all I needed to do was post here and then the solution would turn up so I could feel like an idiot. 🙂
I was able to tweak the response in this question (Disable Or Redirect WP-login.php) and finally get this to work.
If anyone else runs into the same problem, this is what worked for me to block the login and register page, but still allow logouts, lost password requests, and password reset forms to work.
add_action('init','custom_login');
function custom_login(){
global $pagenow;
if( 'wp-login.php' == $pagenow && $_GET['action']!="logout" && $_GET['action']!="lostpassword" && $_GET['action']!="rp") {
wp_redirect( home_url( "https://wordpress.stackexchange.com/" ) );
}
}