I have exactly the same issue. The difference is that “custom email” module does not resolve the issue for me.
I have been debuggin and the problem where issue arises is in class-theme-my-login.php around line 371.
if ( isset( $_GET['key'] ) ) {
$value = sprintf( '%s:%s', wp_unslash( $_GET['login'] ), wp_unslash( $_GET['key'] ) );
setcookie( $rp_cookie, $value, 0, '/', COOKIE_DOMAIN, is_ssl(), true );
wp_safe_redirect( remove_query_arg( array( 'key', 'login' ) ) );
exit;
}
It seems that wp_safe_redirect and exit are last functions executed and the rest part of the code is never executed:
if ( isset( $_COOKIE[ $rp_cookie ] ) && 0 < strpos( $_COOKIE[ $rp_cookie ], ':' ) ) {
Looks like under some conditions wp_safe_redirect is not executed or something else. I have tried to change it ot wp_redirect but it does not help. For me it looks strange that you have to put login and key into cookie and make a redirect to same page and then read those variable from cookies again. Maybe it is a security concern, but it seems it has few issues in certain configurations.
P.S. Hosting caching is disabled. Using wpengine.
Any ideas.