Oi Maurício, eu acho que essa implementação do design Command não está legal.
Veja que no código cada IComando está executando a operação de cálculo: 
  public class MultiplyCommand : IComando
    {
        public int Executa(int x, int y)
        {
            return x * y;
        }
    }
Quando você faz return x * y;, o próprio comando está tomando pra si o papel que seria da calculadora. Ou seja, se você der uma olhada, vai perceber que sua calculadora não está calculando nada, pois esse papel está sendo representado pelos comandos.
Então o que fazer? Você pode mudar os comandos para que eles 1) recebam no construtor uma instância da calculadora e do operando e 2) invoquem a operação desejada na classe Calculadora ("receiver" ou "receptor"):
  public class MultiplyCommand : IComando
    {
        private readonly IReceptor calculadora;
        private readonly int operando;
        public MultiplyCommand (IReceptor calculadora, int operando)
        {
            this.calculadora = calculadora;
            this.operando = operando;
        }
        public void Executa()
        {
            this.calculadora.Multiplica(this.operando);
        }
    }
Ou seja, é o comando que deve delegar a operação para a calculadora, e não o contrário.
E note que eu só armazenei um dos 2 operadores na classe MultiplyCommand: isso porque estou pressupondo que o outro operando é o próprio valor atual da classe Calculadora.