Can use the row_number() over the partiton of ProductCode and Supplier to by using Timestamp  Order by desc to get the latest record by based on the partition. Then you can use in the same query without aggregation to get the desired result.
It is good to use Windows functions rather than Group by for these questions.
SELECT 
   A.Supplier
  ,A.Product
  ,A.Price
FROM
  (
  SELECT 
     t1.Supplier,
     t2.Product,
     T1.Price,
     ROW_NUMBER () OVER ( PARTITION BY t1.Supplier,t2.Product ORDER BY  T1.[Timestamp] DESC ) AS  row_num    
   FROM   t1
    INNER JOIN t2 
      ON t1.ProductCode = t2.ProductCode
    ) AS A WHERE A.row_num = 1 
Tested using below added data.
 CREATE TABLE t1
  ( Supplier varchar(100)
   ,ProductCode int 
   , Price Decimal (10,2)
   , [TimeStamp] datetime
  )
CREATE TABLE t2
( 
 ProductCode int 
 ,Product varchar(100)
 )
  insert into t1 values ('A', 1, 100.00, GetDate())
  insert into t1 values ('A', 1, 80.00, GetDate())
  insert into t1 values ('b', 2, 190.00, GetDate())
  insert into t1 values ('b', 2, 500.00, GetDate())
  insert into t2 values (1, 'Pro1')
  insert into t2 values (2, 'Pro2')
  insert into t2 values (3, 'Pro3')
