Updating a set of rows in a table with values from a different set of rows. Both sets are from the same table
Assuming that all rows in 2018 have a matching one in 2017 (with same values in Customer and Invoice Line) or you want to update only the matching rows, then you only need an UPDATE, not MERGE:

UPDATE upd
SET Amount  = old.Amount, 
    Product = old.Product
FROM dbo.Invoices AS upd
    JOIN dbo.Invoices AS old
    ON  upd.Customer       = old.Customer
    AND upd.[Invoice Line] = old.[Invoice Line]
WHERE upd.Year = 2018
  AND old.Year = 2017 ;


You may want to add AND upd.Amount = 0 as a safeguard so not to update good data but only rows with 0.