I'm sure I'm side-stepping your question, but I did flash on something regarding the "speed of deletion". Find seems to work better sometimes, then delete the array.
#untested
my @selected = $canvas->find('withtag', 'in_polygon');
foreach(@selected){ $canvas->delete($_); }