Só de criar alguns métodos para efetuar as verificações já reduziria bastante a reescrita e possíveis erros de mensagens das exceções. Por exemplo, nas linhas 913 e 943 é feito o mesmo teste e disparada a mesma mensagem na exceção, se fosse um método só pra este teste reduziria as chances de mensagens diferentes (neste caso uma exceção específica seria melhor do que só disparar uma exceção).
A sua ideia usando __call seria tornar os métodos privados e fazer uma lista de métodos a serem executados antes, quase como aplicar um decorator?
Uma possibilidade é alterar o desenho da classe, dividindo-a de forma que os itens testados constantemente sejam obrigatórios já na instanciação do objeto.