What found set do you have at the time that your import your records? Is the matching field present in your found set? To be sure that this is the case, do a Show All Records before you import.
The first line of the script is Show All Records.
What version of FileMaker are you using?
There's a bug that can affect this in older versions when using a script, but the bug should not affect a manual import.
Since this works with backup copies, either there is some change to your file for which you are not aware or you file might be damaged in some way that is keeping the import from working.
You might try running a recover on this file, or recent back up copy of it to check for damage. The recover will also rebuild all your field indexes, so test the recovered copy even if the recover does not report fixing any problems.
If the recovered copy works and no problems were found by the recover, you can do a new recover, but specify "copy file blocks as is" and "rebuild indexes" in advanced recover options to only rebuild the indexes to see if that works.
I was actually running a recover while waiting for comments. It has finished but the problem persists in the recovered copy.
I ran another import script (for something else) and that works, so it isn't some over-riding setting preventing FM from importing.
Can fields somehow be locked against being updated?
It's possible, but would take a specific design change by the developer and you should get an error message telling you that.
What message pops up after the import? There should be one providing info about the import. What does it say? There might be a clue in there.
I just found it is actually importing, but extremely slowly. The process usually takes about 30 seconds but this time it looks like it is going to take at least all night. What could slow it down so much?
The number of records in the import file, the number of records in your found set, Imported data will update indexes and the larger your table gets, the longer it takes to update the index...
But the change from 30 seconds to "all night" is very extreme.