I found the culprit. The IInsert.Execute call returns an IFeatureReader that has to be disposed. My original code was like this:
using (IInsert cmd = ...
{
...
cmd.Execute();
}
I changed it to:
using (IInsert cmd = ...
{
...
IFeatureReader reader = cmd.Execute();
reader.Dispose();
}
Steve