A better solution is to tell LilyPond that you don't want it to
put rehearsal marks above other objects:
\version "2.12.2"
\score {
\relative c' {
\clef G
\time 4/4
c'1 d
\override Score.RehearsalMark #'extra-spacing-width = #'(0 . 0)
\override Score.RehearsalMark #'extra-spacing-height =
#'(-inf.0 . +inf.0)
\bar "||" \mark \markup{\box "M2"} e( \f ^\markup{Tutti} f)
}
}
Depending on the situation, you may also want to combine this
setting with \textLengthOn, which does exactly the same setting
for text scripts.
Unfortunately, the only available documentation of these
properties seems to be in the internals reference: