SOLID.LSP + ООП.Полиморфизм = противоречиe?
LSP предписывает наследникам сохранять поведение (контракт) базового класса.
Не поведение, а ограничения. LSP разрешает только усиливать требования к себе, и только ослаблять — требования к другим. Поведение же может меняться как хочешь в рамках этих ограничений.
Например, интерфейс Stream позволяет мультиплексированные потоки (то есть потоки, где мы не можем считать записанное, чтение и запись идёт по разным каналам и никак не связаны друг с другом — например, COM-порты), а какой-нибудь BufferedStream ограничивается только потоками, где мы пишем в какую-нибудь цепочку байтов (например, файл), и читаем из неё же, без мультиплексирования.
Тогда как полиморфизм - это способность изменять поведение методов базового класса в наследниках
Довольно странное утверждение. Полиморфизм - это скорее способность взаимозаменяемости типов. То есть в метод можно передать и класс А, и класс В : А. 
Принцип LSP  же как раз о том, как лучше этого достигнуть