Hi Brad, you are very close. This is what I found at http://old-dos.ru/books/7/2/3/ComputerPress-1992-07.pdf (translated from Russian to English):
The resource table, defined in the new-exe header, contains links describing each resource in the file. However, if a particular resource is a named resource or its name is used as the resource identifier, the corresponding name or type will not be included in the resource table. In this case, a table of names is used to assign an integer value to a specific resource type.
The name table is a resource of type RT_NAMETABLE (decimal 15) and contains a sequence of records. Although the namesheets are supported in Windows 3.0, they will not be available in subsequent versions of Windows.
struct tagNAMEENTRY {
WORD wBytesInEntry;
WORD wTypeOrdinal;
WORD wldOrdinal;
char szType[];
char szID[];
} NAMEENTRY;
wBytesInEntry indicates the number of bytes in the input of the name table;
wTypeOrdinal specifies the resource sequence number in the name table (if the most significant bit in this field is set, then the resource type was replaced by the resource compiler by the serial number; if the most significant bit is not set, then the resource type is not a named type and zero is in the szType field);
wldOrdinal specifies the ordinal number of the resource identifier in the name table (if the most significant bit in this field is set, the resource identifier was replaced by the resource compiler by the serial number and the string of the named identifier appears in the szID array; if the high bit is not set, then the identifier of the named resource does not exist and zero is written in the szID array);
szType indicates the type of the resource (in this array there must be a zero-terminated string, if the most significant bit of the wTypeOrdinal field is not set, then the array contains only one zero byte);
szID specifies the name of the resource (in this array there must be a zero-terminated string, if the most significant bit of the field wldOrdinal is not set, then the array contains only one zero byte).
<end of citation>
Surprisingly, sometimes the RT_NAMETABLE is seen even in PE files, probably if the programmer wants to assign both integer Id and a text name.