表題の問題を発見しました。
I2Cバスのスペックによれば、受信側は内部に「これ以上受信データを受信できない」場合には、NACKを返すことになっています(3.1.6節)。しかしながら、STM32F7 HALのHAL_I2C_Slave_Rx_IT()は、このNACKを生成しません。これは「STM32のHAL_I2C_Slave_Receive_IT()の挙動がおかしい」で説明したものとは違う問題です(先の件はL152だった。今回はF722)。NACKを送らない結果、受信バッファがいっぱいであるにもかかわらずマスターTXはデータを送り続けます。1バイト余計に送られてきた場合はスレーブは何事もなかったように正常終了し、2バイト余計に送られてきたと着た場合は、スレーブはクロックをストレッチします。
実装がでたらめですね。
この問題はSTのコミュニティに報告済みです。