Head, Shoulders, Knees and Toes, Knees and Toes
JavaScript (ES6), 91 88 87 bytes

n=&gt;'knees,toes,head,shoulders,eyes,ears,mouth,nose'.split`,`[(245890&gt;&gt;(n%22&amp;~1))&amp;6|n%2]


How it works

We have 4 distinct pairs of words that always appear together: 'head' is always followed by 'shoulders', 'knees' is always followed by 'toes', etc.

Therefore, we can use the following index:

00: [ 'knees', 'toes' ]
01: [ 'head', 'shoulders' ]
10: [ 'eyes', 'ears' ]
11: [ 'mouth', 'nose' ]


And compress the whole sequence (in reverse order) into the following binary mask:

00 00 01 11 10 00 00 01 00 00 01


We use [ 'knees', 'toes' ] as the first pair to get as many leading zeros as possible.

We pad this sequence with an extra 0 so that the extracted value is premultiplied by 2, which leads to:

0b00000111100000010000010 = 245890


Hence the final formula for the correct word:

(245890 &gt;&gt; (n % 22 &amp; ~1)) &amp; 6 | n % 2


Test cases



let f =

n=&gt;'knees,toes,head,shoulders,eyes,ears,mouth,nose'.split`,`[(245890&gt;&gt;(n%22&amp;~1))&amp;6|n%2]

console.log(f(0));    // head
console.log(f(1));    // shoulders
console.log(f(7));    // shoulders
console.log(f(13));   // ears
console.log(f(20));   // knees
console.log(f(35));   // ears
console.log(f(37));   // nose
console.log(f(98));   // knees
console.log(f(543));  // nose
console.log(f(1000)); // knees