Is this appropriate way to pass data from presentation to application layer?
Overall, your code is very good, there is not much to review..

In your ViewModel, you might want to use DataAnnotations to do client (using jquery unobstrusive script)/server validation ex : 

public class ProductCreateViewModel : ICreateProductCommand
{
    [Required]
    public string Name { get; set; }

    [Required]
    public int Price { get; set; }
}

public ActionResult ProductCreateAction(ProductCreateViewModel vm)
{
    if(ModelState.IsValid) //Server validation of the data annotations.
    {
        _productService.CreateProduct(vm);
        return Json(new { Ok = true });
    }
}


To answer your second question, I believe it is better to use two separated actions to separate the use cases of when you will use Create vs. Update. Plus one day you might have different roles for adding and updating (it's a little hardcore but it could happen), you would want your actions to be marked with different authentication attributes (If you use MVC membership)