Bueno, después de mucho investigar y hacer muchas "prueba / error" lo he sacado.
La solución es esta:
var entradatraspaso = from a in stBR.LOJA_ENTRADAS_PRODUTO
join b in stBR.LOJA_ENTRADAS
on new { a.FILIAL, a.ROMANEIO_PRODUTO } equals new { b.FILIAL, b.ROMANEIO_PRODUTO }
join c in stBR.PRODUTOS_BARRA
on a.PRODUTO equals c.PRODUTO into left
from bc in left.DefaultIfEmpty()
where b.EMISSAO > fchep
group new { a, b, bc } by new
{ b.EMISSAO, a.FILIAL, bc.CODIGO_BARRA, b.TIPO_ENTRADA_SAIDA } into grupo
select new ClassStock
{
Date
= grupo.Key.EMISSAO,
StoreID
= grupo.Key.FILIAL,
EANnumber
= grupo.Key.CODIGO_BARRA,
Qty
= grupo.Sum(a => a.a.EN1),
//Value
= "",
Type
= "Entry Transfer",
TypeID
= grupo.Key.TIPO_ENTRADA_SAIDA,
};
El truco está en "crear" el grupo con la línea: group new { a, b, bc } by new { b.EMISSAO, a.FILIAL, bc.CODIGO_BARRA, b.TIPO_ENTRADA_SAIDA } into grupo
Espero que le sirva a alguien.
Saludos.