What is correct destination for fid in destination image field?
So the final solution that worked for this is as follows:

field_image:
  plugin: iterator
  source: field_thumbnail
  process:
    target_id:
      plugin: migration
      migration: file
      source: fid
    alt: alt
    title: title
    height: height
    width: width


As explained to me by @mikeryan, the iterator plugin allows you to iterate over multiple values which have subfields, and map the subfields in the internal process pipeline the way fields are at the top level. In this case, I just used the migration plugin to get the target fid from the file migration, and this puts it in the field_image_target_id column in node__field_image table.