Нет никаких гарантий с innerHTML, что он вернет содержимое, идентичное строке, которую вы передали. Внутренний HTML создается браузером с использованием его представления в виде HTML-дерева - поэтому он будет генерировать результирующую строку так, как считает нужным.
Таким образом, в зависимости от ваших потребностей, вы можете попытаться использовать некоторый HTML-код для разбора, который распознает идентификаторы без кавычек, ИЛИ попытаться убедить браузер использовать новейший движок, который с большей вероятностью будет создавать innerHTML по вашему вкусу.
т.е. в вашем случае похоже, что по крайней мере IE9 отображает ваш HTML как IE9: режим Quirks (который возвращает innerHTML в форме, которой вы не довольны), если вы сделаете правильный HTML или принудительный режим для IE9: стандартным вы получите строку с qoutes как
document.getElementsByTagName("html")[0].innerHTML
IE9: Стандарты - "<head></head><body><div id="TEST"></div></body>"
IE9: Причуды -
"<HEAD></HEAD>
<BODY>
<DIV id=TEST></DIV></BODY>"
Вы можете попробовать сами, создав образец HTML-файла и открыв его с диска. F12 для отображения инструментов разработчика и режима проверки в строке меню.