Да, через указатель на базовый класс можно обратиться к полю его дочернего класса, если поле является членом именно этого класса и не перекрыто виртуальными функциями или статическими полями.
Относительно второго вопроса - чтобы обратиться к полю реализации второго интерфейса без использования dynamic_cast или упоминания о реализации, можно воспользоваться приведением типа через static_pointer_cast. Однако, это работает только если объект, на который указывает shared_ptr, действительно является экземпляром класса с реализацией второго интерфейса. Если это не так, использование метода интерфейса, принимающего shared_ptr на этот интерфейс, может привести к непредсказуемому поведению или ошибке времени выполнения.