What is going wrong with the file_field_path redirect for my files?
It turned out that what was happening is that the old redirects were never being deleted when I rolled back my migrations.  When I did a reimport, the source for the redirect already existed so new ones weren't being created.  To solve this I implemented hook_node_delete as follows (I need to delete redirects to system/files/publication_documents/{either int or pub}/{the value of a field}/{node id}) :

function MYMODULE_node_delete($node){
    // Delete alias.
    $nid = $node-&gt;nid;

    $type = $node-&gt;{'field_doc_type_' . $node-&gt;type}[LANGUAGE_NONE][0]['value'];
    foreach (array('pub', 'int') as $status) {
        redirect_delete_by_path('system/files/publication_documents/' . $status . '/' . $type . '/' . $nid);
    }
}


This works when the redirects have been created with the current $nid, but this wasn't true for any of the existing redirects in the system, so I wrote remove_redirects.php:

&lt;?php
redirect_delete_by_path('system');


and then I rolled back my entire migration and ran drush scr remove_redirects

This cleared out the existing redirects, so I can run the migration again, and future rollbacks will get rid of the redirects too.