Probiere mal testweise das with aufzulösen, indem du stattdessen eine kurze lokale Variable für den Canvas nimmst.
BeginScene hat auch ein boolschen Rückgabewert, den du vor dem Zeichnen prüfen kannst.
Delphi-Quellcode:
if MyCanvasVariable.BeginScene then
begin
//...Drawing...
MyCanvasVariable.EndScene;
end;