OK, finally tracked it down. Although caused by an error in the code, I am calling this a bug. DAW please take note.

Here is the explanation:
Code:
            Clear CodeMast
            Move "CELLPREFIX" to CODEMAST.TYPE
            Move "083" to CODEMAST.CODE
            Find eq CODEMAST by Index.1
            Move Found to WindowIndex  // = 1
            
            Get_Attribute DF_FILE_OPENED of PlotTmpD.File_Number to WindowIndex  // 0!  PlotTmpD is NOT open!!!
            
    // Save current states....
    Move (GetRowID(PlotTmpD.File_Number))   to SaveRowID  // And this is then the line which (indirectly) causes the problem

            Clear CodeMast
            Move "CELLPREFIX" to CODEMAST.TYPE  // empty after Move
            Move "083" to CODEMAST.CODE         // empty after Move
            Find eq CODEMAST by Index.1
            Move Found to WindowIndex  // = 0
A function called by validate_save relies on the table PlotTmpD for checking something (it really doesn't matter what - the table is actually empty in my data, so the check would always fail anyway), but the line: "Move (GetRowID(PlotTmpD.File_Number)) to SaveRowID" (referencing the unopened table PlotTmpD) causes the following, entirely valid, code to fail in this bizarre and hard to understand way.

There is something wrong with the function GetRowID in the runtime which is doing this. It should raise an error if the passed file number is not open, but instead it silently does something spooky which I confess to not really understanding. In the lower block of code referencing CodeMast, CodeMast is still open (Get_Attribute DF_FILE_OPENED on it returns true), but it seems to behave as though it is not open. Moves to its buffer don't change that buffer and of course the find on it - and all subsequent attempts to work with it - fails.

Mike