Why wp redirects me to wp-login.php when I visit a rewritten wp-admin URL?

You have to use a redirect not just a rewrite:

^dashboard(.*) wp-admin$1 [L,R=301]

WordPress is using a hard coded search for wp-admin in the request URI.