Just invoke LAG(standardcost) OVER(PARTITION BY productid ORDER BY startdate), and impose an outer query condition specifying just the rows that exhibit changed values ...
SELECT *
FROM (
SELECT
productid, startdate,enddate,standardcost,
LAG(standardcost, 1) OVER (
PARTITION BY productid
ORDER BY startdate
) as prev_cost
FROM products
) x
WHERE standardcost <> prev_cost;
The outer query is needed because a Lag() column will not accept a Where condition.
For other examples of tracking value changes, see "Track state changes" under "Aggregates".