Странное поведение псевдокласса :nth-child
А не подходит вам вариант завернуть всё в див ещё один, скажем, вот так:
<div class="content">
    <ul class="list">
        <li>1</li>
        <li>2</li>
    </ul>
    <div class="nodes">
    <div class="node">node-1</div>
    <div class="node">node-2</div>
    <div class="node">node-3</div>
    <div class="node">node-4</div>
    <div class="node">node-5</div>
    <div class="node">node-6</div>
    <div class="node">node-7</div>
    </div>
</div>​


Ну и стили:
.nodes .node {
    background: gray;
}
.nodes .node:nth-child(odd) {
    background: red;
}

Это обычное поведение, дело в том, что навешивая стили на псевдокласс, вы указываете как его стилизовать, но это не указывает на порядок следования элементов — для .content первым и соответственно нечетным элементом всегда будет ul.
Попробуйте написать таблицу и пропишите стили к первой строке путем tr:first-child, а затем заверните содержимое в тег tbody — вы удивитесь, но стили не применятся, так как для table первым элементом идет не tr а tbody