Oi Felipe, tudo bem?
Boa pergunta! Os métodos de extensão (do jeito que foi explicado no curso) são usados quando você não tem acesso à classe original, ou quando você não pode modificar a class original. Eles servem para
classeForaDoMeuAlcance.MeuMetodoDeExtensao(arg1, arg2, ...);
O que você mencionou sobre o princípio open/closed ("aberto para extensão/fechado para modificação) não se aplica somente a quando você não tem acesso à classe original, mas também quando você tem acesso.
Para aplicar o open/closed, podemos usar herança, interface e composição em vez de métodos de extensão, por exemplo.
Ao implementar o open/closed, diminuímos a chance de introduzir bugs no projeto. Por exemplo, se tivermos uma classe já testada e funcionando em produção, é melhor estender do que alterar, pois assim temos um impacto menor no resto do sistema. Assim, criamos outra classe para estender o comportamento da classe original, evitando modificação de funcionalidade existente. Além disso, só precisamos testar e implantar novas funcionalidades. O código original da classe se mantém intacto.
Você pode ler mais sobre esses assuntos neste post do Maurício Aniche no blog da Caelum: Princípios do Código Sólido na orientação a objetos
Um abraço!