Redirect to custom login page

You can redirect requests to wp-login.php to your page:

add_action(
  'login_head',
  function() {
    $parsed = parse_url($_SERVER['REQUEST_URI']);
    $redirect = site_url('mypage');
    if (!empty($parsed['query'])) {
      $redirect .= '?'.$parsed['query'];
    }
    wp_safe_redirect($redirect,301);
    exit;
  }
);

However, wp-login.php appears ~34 times in Core on my 3.6.1 install ( grep -Rn "wp-login.php" * | wc -l
), and many of those do not appear to be filterable. Actually altering all of those links would take some work and may well involve core hacks.

The login_url filter, and the logout_url one, will get you part way, but it do not cover all cases.

add_action(
  'login_url',
  function($url) {
    return str_replace('wp-login.php','mypage',$url);
  }
);

Very rough code. Barely tested. Possibly buggy. Caveat emptor. No refunds.