Por más que lo pienso, creo que no es posible con un simple 'Select'.
El error que indicas arriba de 'referencia de columna inválida' no es mayor problema. Bastaría incluir todos aquellos campos que no sean 'Max' en el Group By, aunque sean los respectivos nombres de empresas y tipos obtenidos de los join.
Analizando el asunto .... necesitas obtener el 'Producto_Codigo' para cada uno de los valores del Max(Fecha). Una vez que tuvieras ese 'Producto_Codigo' podrías obtener el precio correspondiente a ese registro.
Y ahí veo el problema. No sé cómo obtenerlo.

Lo único que se me ocurre es incluir dos DataSet's en tu aplicación, uno para calcular el Max(Fecha) por cada Producto, y el segundo DataSet que sea 'detalle' del primer DataSet 'maestro', y esten referenciados por esa columna 'Maxima Fecha' obtenida. Y ya en el segundo DataSet buscas el 'Producto_Codigo' y su correspondiente 'Precio' asociado.
Si no lo haces con dos DataSet's, entonces veo la necesitad de implementar un Stored Procedure que te lo resuelva. Con ello si que no sería mayor problema.
Si a alguien se le ocurre otra solución, bienvenida sea !
