When I request Jenkins safe restart while a matrix project is building, all configurations of that project are built before Jenkins restarts.
That is, the matrix project behaves like a free-style project, i.e. the whole matrix runs without interruption. That seems an artificial limitation to me. The top level build is pure Java, it should be able to save its state and continue after the restart.
When the restart is requested, the top level build should stop running new configuration builds, wait until the running configuration builds complete and restart.
That would greatly help with Jenkins updates on systems with large matrix projects.