From the point of view of the mapper, these two mappings are the same, so everything that fits the second also fits the first and therefore you never will be redirected to the second...
Try something like this:
Private Shared Sub RegisterRoutes(routes As RouteCollection)
routes.MapPageRoute("shop2", "{name}.aspx", "~/shop2.aspx")
routes.MapPageRoute("DynamicPage", "product/{name}.aspx", "~/DynamicPage.aspx")
End Sub
Read more here:
RouteCollection.MapPageRoute Method (System.Web.Routing)[
^]