Custom login redirect failed in hook_user_login
drupal_goto() will use $_GET['destination'] when it is set. The following is the code used from the function.

  if (isset($_GET['destination']) &amp;&amp; !url_is_external($_GET['destination'])) {
    $destination = drupal_parse_url($_GET['destination']);
    $path = $destination['path'];
    $options['query'] = $destination['query'];
    $options['fragment'] = $destination['fragment'];
  }


Setting $edit['redirect'] inside hook_user_login() doesn't have any effect.
What you can do is changing $_GET['destination'] in hook_user_login(). If you want to be sure the user is redirected to the path you set, you should be sure your hook is executed last, for example by increasing the weight of your module.