Io ridefinirei il comando \part, con ‘titleformat{part} invece di ridefinire il comando per scrivere la “parte” nell’indice.
Per lo meno curerei che le due definizioni vadano d’accordo.
Bisogna tenere conto che \part, tra le altre cose, manda della roba all’indice mediante un comando \addtocontents e starei bene attento a che cosa viene inviato all’indice; magari il trattino va messo lì, non nella formattazione della riga.
Ecco perché, benché l’uso dei pacchetti come titletoc e titlesec siano molto comodi, quando scrivo una classe io preferisco gestirmi da solo tutto quanto, invece di appoggiarmi a pacchetti esterni, che, benché comodissimi e agilisssimi, sono precostituiti e non sgarrano da quanto sono stati programmati per fare. Tra l’alto i comandi relativi alla formattazione del titolo della parte e di come questo titolo compare nell’indice sono abbastanza semplici, quindi non è difficile ottenere quello che desideri. Con \chapter e con \section, oltre ai comandi di sezionamento inferiori, le cose sono più complesse.
Apri book.cls, eventualmente anche book10.clo (o una delle sue consorelle), e cerca le definizioni per realizzare \part e \part*; guarda che cosa fanno e agisci di conseguenza. Scusa ma sto scappando.