Valore PORTB Arduino cambia durante esecuzione

E' normale che si comporti così.
Tu assegni a B il valore di PORTB nel setup, poi nel loop cambi lo stato del pin (e di conseguenza PORTB):

digitalWrite(8, HIGH);

ma poi controlli il valore di B che contiene il valore che gli hai assegnato nel setup.
Non è che se assegni ad una variabile il valore di un altra (nel tuo caso assegni a B il valore contenuto in PORTB) allora questa poi ne segue i cambiamenti.
Se proprio vuoi continuare ad usare B devi riassegnare il valore ogni volta prima di farci sopra le indagini, ma è inutile e superfluo puoi usare direttamente PORTB