Pessoalmente, acho que Tuplas é uma parte iterativa do desenvolvimento quando você está em um ciclo investigativo ou apenas "brincando". Como uma tupla é genérica, tendo a pensar nela quando trabalho com parâmetros genéricos - especialmente quando desejo desenvolver uma parte genérica de código e estou começando no final do código, em vez de me perguntar "como gostaria desta chamada olhar?".
Freqüentemente, percebo que a coleção formada pela Tupla se torna parte de uma lista, e olhar para Lista> não expressa realmente a intenção da lista, ou como ela funciona. Muitas vezes "vivo" com isso, mas me vejo querendo manipular a lista e alterar um valor - nesse ponto, não quero necessariamente criar uma nova Tupla para isso, portanto, preciso criar minha própria classe ou estrutura para segurá-lo, para que eu possa adicionar código de manipulação.
Obviamente, sempre há métodos de extensão - mas frequentemente você não deseja estender esse código extra para implementações genéricas.
Houve ocasiões em que quis expressar dados como tuplas, mas não tive tuplas disponíveis. (VS2008), caso em que acabei de criar minha própria classe Tuple - e não a tornei thread-safe (imutável).
Portanto, acho que sou da opinião de que as tuplas são preguiçosas em programar à custa de perder um nome de tipo que descreva seu propósito. A outra despesa é que você tem que declarar a assinatura da Tupla onde quer que seja usada como parâmetro. Depois de vários métodos que começam a parecer inchados, você pode sentir como eu, que vale a pena fazer uma classe, pois ela limpa as assinaturas dos métodos.
Eu tendo a começar tendo a classe como um membro público da classe em que você já está trabalhando. Mas no momento em que se estende além de simplesmente uma coleção de valores, ele obtém seu próprio arquivo e eu o removo da classe que o contém.
Então, em retrospecto, acredito que uso tuplas quando não quero sair e escrever uma aula, e só quero pensar sobre o que estou escrevendo agora. O que significa que a assinatura da Tupla pode mudar bastante no texto meia hora enquanto eu descubro quais dados vou precisar para este método, e como ele está retornando os valores que retornará.
Se eu tiver a chance de refatorar o código, geralmente questionarei o lugar de um Tuple nele.