Сделал downgrade до версии 2.4.0 (кстати данная версия используется в UNetLab) и проблема ушла.
В данной версии эта функция имеет совершенно другой вид
static uint64_t
e1000_mmio_read(void *opaque, hwaddr addr, unsigned size)
{
    E1000State *s = opaque;
    unsigned int index = (addr & 0x1ffff) >> 2;

    if (index < NREADOPS && macreg_readops[index])
    {
        return macreg_readops[index](s, index);
    }
    DBGOUT(UNKNOWN, "MMIO unknown read addr=0x%08x\n", index<<2);
    return 0;
}

Остается большой загадкой с какой целью разработчики сделали данное условие
if (mac_reg_access[index] & MAC_ACCESS_PARTIAL) {
   DBGOUT(GENERAL, "Reading register at offset: 0x%08x. "
                   "It is not fully implemented.\n", index<<2);
}

В итоге я решил в версии 2.6.0 закомментировать данное условие.
--- a/qemu-2.6.0/hw/net/e1000.c	2016-05-12 01:56:09.000000000 +1000
+++ b/qemu-2.6.0/hw/net/e1000.c	2016-08-14 19:09:34.133938177 +1000
@@ -1485,10 +1485,12 @@
     if (index < NWRITEOPS && macreg_writeops[index]) {
         if (!(mac_reg_access[index] & MAC_ACCESS_FLAG_NEEDED)
             || (s->compat_flags & (mac_reg_access[index] >> 2))) {
+            /*
             if (mac_reg_access[index] & MAC_ACCESS_PARTIAL) {
                 DBGOUT(GENERAL, "Writing to register at offset: 0x%08x. "
                        "It is not fully implemented.\n", index<<2);
             }
+            */
             macreg_writeops[index](s, index, val);
         } else {    /* "flag needed" bit is set, but the flag is not active */
             DBGOUT(MMIO, "MMIO write attempt to disabled reg. addr=0x%08x\n",
@@ -1512,10 +1514,12 @@
     if (index < NREADOPS && macreg_readops[index]) {
         if (!(mac_reg_access[index] & MAC_ACCESS_FLAG_NEEDED)
             || (s->compat_flags & (mac_reg_access[index] >> 2))) {
+            /*
             if (mac_reg_access[index] & MAC_ACCESS_PARTIAL) {
                 DBGOUT(GENERAL, "Reading register at offset: 0x%08x. "
                        "It is not fully implemented.\n", index<<2);
             }
+            */
             return macreg_readops[index](s, index);
         } else {    /* "flag needed" bit is set, but the flag is not active */
             DBGOUT(MMIO, "MMIO read attempt of disabled reg. addr=0x%08x\n",

Решение так себе, но другого варианта я не вижу. Cisco vIOS работает вполне нормально.
Кстати заглянул в 2.7.0 и там эта функция такая же как и в 2.6.0