ApproxValue should be using a slightly different syntax:
=[Product][CostPerSite] * [NumberSites]
This will use the value in the [Product] column of the current row to retrieve the CostPerSite of that specific product.
As entered right now, it is trying to guess which row should in Products table it should use since Products[CostPerSite] evaluates to the full column rather than a specific row. I believe it's failing after row 3 since most likely you have 3 rows in the products table. We'll see if we can improve this behavior to be more consistent.
Please let me know if you continue experiencing issue or have additional questions.