Я немного растерялся. Если и OriginalFirstThunk, и FirstThunk указывают на IMAGE_IMPORT_BY_NAME, почему бы не использовать OrignalFirstThunk вместо FirstThunk?
[StructLayout(LayoutKind.Sequential)]
public struct IMAGE_IMPORT_DIRECTORY
{
public int ImportLookupTable; // union { Characteristics; OriginalFirstThunk }
public int TimeDateStamp;
public int ForwarderChain;
public int NameRva; // Name
public int ImportAddressTable; // FirstThunk
}

до загрузки

после загрузки
В моем понимании адрес импортированного символа хранится в массиве FirstThunk. В таком случае, почему бы не выделить поле для хранения этого адреса в OrignalFirstThunk, а отдельно открыть новый массив FirstThunk?