1. Максимальное значение, которое можно записать в 2 байта - 0xFFFF, т.е. 65535
2. Если внимательно посмотришь стандарт IEEE 802.3 п.3, то там поле, которое ты называешь length называется Length/Type. Т.е. это не просто length - это такой зверь в двойном обличии. Если значение этих двух байт <=0x600 то это поле воспринимается как length. Если >0x600, то это Type. Под Type в данном случае понимается EtherType. Например для протокола IP EtherType == 0x800. Некоторые значения EtherType можешь посмотреть на вики:
https://en.wikipedia.org/wiki/EtherType.
К слову, на сегодняшний день в типичной сети почти всегда это поле интерпретируется как EtherType. В этом случае длина пакета должна быть закодирована на уровне вышестоящего протокола, т.е. где-то там в payload.
Реально у Ethernet есть другой способ определения длины пакета - после завершения передачи происходит удаление сигнала carrierSense и межфреймовая задержка. По этим признакам физика понимает, что пакет получен. После этого уже можно проверить Length/Type, посчитать контрольную сумму и провести другие проверки.
3. Интерпретация Length используется для протокола LLC (IEEE 802.2), если я правильно помню.