Inicialmente, gosto de criar um DTO para cada Entity. Na camada de serviço, faço a busca da entidade no banco e já converto para um DTO, então nenhum Entity sai da service. Se houver necessidade de algum modelo mais específico, monto um novo DTO com dados personalizados, se possível tento não fazer classes DTOs muito grandes, pois inevitavelmente acaba gerando complexidade (já vi classes DTO com uns 200 atributos, é horrível de dar manutenção). Quanto a conversão para dto e para entity, dentro da classe DTO tenho além do construtor padrão, um construtor que recebe a entidade, e para o caminho inverso, dentro do próprio DTO crio um método toEntity() que retorna uma instância da entitidade.