Soweit ich mich erinnern kann, musst du dich immer um das Zeichnen jeder Zelle kümmern. Also nicht nur bei denen, die du anders darstellen willst.
Um das etwas zu präzisieren: Das wird über das Property
DefaultDrawing
gesteuert. Ist das true, malt das StringGrid vor dem Event schon mal den Text in die Zelle. Das ist der Übermalen-Effekt, den du schon bemerkt hast. Wenn DefaultDrawing auf False steht, musst du aber eben auch alle Zellen selbst malen. Dabei solltest du allerdings den Inhalt des State-Parameters berücksichtigen.
Weiterhin gibt es zu bedenken, daß ein aktiver Editor in einer Zelle selbst das Malen übernimmt. Da du
goAlwaysShowEditor aktiv hast, bleibt der InplaceEditor sichtbar (und auch für die Textdarstellung zuständig) wenn du das Grid verlässt.