The problem here is that your code is using "Product.Name" which is not defined - your loop is using the instance "p" so you need "p.ProductName" - that's how you'd do it with your code.
You can also do this in the UserControl itself if you use the MVC Toolkit:
<%=Html.RenderUserControl("MyProductDisplay.ascx")%>
If you declare "MyProductDisplay.ascx" as a ViewUserControl<Product> (assuming your view is a ViewPage<Product>) - they will "auto share" the ViewData so that in the user control you can access ViewData.
You can also explicitly set the data on a UserControl:
<%=Html.RenderUserControl("MyProductDisplay",ViewData.Product)%>
This is a nice option if you don't want to share ViewData.
It's Christmas Eve and Santa is on the roof...