You can clear the dirty flag from JSL after changing the table, but then it won't prompt at all when closed. You could add a tool to do that.
I've hit this issue as well. My current project is running off the scheduler with tasks rescheduling themselves multiple times per second. The weird close behavior does not happen. There are no sleeps in the JSL, only in the scheduler. Here I've moved the scheduler from its window to my window:
sDum = Schedule( 0, Empty() ); // dummy scheduler
repDum = sDum << getcontainer; // the parent of the outline that holds the scheduler
sched = Remove From( repDum, 1 ); // steal the scheduler from the window it opens
sched << Close( 0 ) << settitle( "scheduler" );
repDum << closewindow; // and close the unwanted window
...
newwindow("connections", vlistbox( hlistbox(... , sched , ...) , ... ));

The technique for grabbing the scheduler has changed since the last time I used it in News Feed which used <<parent to get the report.
Craige