Se você chamar DadosReducaoZ logo antes de enviar o comando em um dia normal de funcionamento ele retorna tudo blza, mas se chama-lo por exemplo antes de uma Z pendente a não ser os contadores e GT o restante vira tudo zerado porque a impressora já virou o dia, isso acontece porque DadosReducaoZ retorna os dados do momento, diferente de DadosUltimaReducaoZ que retorna realmente os dados da última redução Z e por isso que ele deve ser chamado depois.
Quanto ao merge, seria comparar todas as informações e complementar com o que não tiver vindo, por exemplo Troco, se o modelo de impressora não retorna-lo o DadosUltimaReducaoZClass vai retornar -1 que significa que o dado não existe ou não pode ser lido, isso vale para todas as propriedades que possuem valores.