OK! I've got a simple reproducible case... when I draw text into two sprites, the SECOND ONE in the code always has the trail/ghost effect. But the first one does not!
(Note: if I put another sprite in back, the problem goes away. Only happens over non-sprite backgrounds.)
This main.lua will show the problem:
import "CoreLibs/graphics"
import "CoreLibs/timer"
import "CoreLibs/sprites"
local pd <const> = playdate
local gfx <const> = pd.graphics
gfx.setBackgroundColor(gfx.kColorClear)
pd.display.setRefreshRate(10)
comp1 = gfx.sprite.new()
comp1:add()
comp2 = gfx.sprite.new()
comp2:add()
function pd.update()
gfx.clear(gfx.kColorBlack)
-- PROBLEM IS HERE:
-- EVEN IF NEXT 2 LINES ARE SWAPPED, 2ND ONE ALWAYS MAKES TRAILS
showText(comp1, 100,100, "Test 1")
showText(comp2, 200,200, "Test 2")
end
function showText(textSprite, alignX, alignY, text)
textSprite:setSize(64, 28)
textSprite:moveTo(alignX + math.random(-10,10), alignY + math.random(-10,10))
local textImage = gfx.image.new(64, 28)
gfx.pushContext(textImage)
gfx.setImageDrawMode(gfx.kDrawModeFillWhite)
gfx.drawText(text, 0, 0)
gfx.popContext()
textSprite:setImage(textImage)
textSprite:update()
end
That code should draw "Test 1" and "Test 2" in the same way, but instead...

Stranger and stranger... What am I missing? 
Full project attached—but that main.lua is the whole thing anyway
Phi Trails Test.zip (9.2 KB)