Those 8 point compass modules are used in some vehicular applications, so you may find one locally by pursuing that avenue rather than ordering them internationally. Perhaps they may even be available used (even more inexpensive) at a automotive scrap yard.
Depending on what your doing, couldn't you use one of the less expensive 8 point compass modules and use interpolation (i.e I must rotate the sensor x number of stepper steps/servo degrees before it changes the reported orientation) to approximate greater resolution? I mean sure if your not using this on a bot or something that could achieve a precisely aligned set of steps, that would preclude this tactic... but if you are, then you could recalibrate it on start up each time and not have to deal with the frustration of noise.
Sure, the view of the ceiling could be blocked, but if you did a hybrid of dead reckoning... i.e. guess where you are by quadrature but verify when possible, you'd decrease the innate inaccuracy of dead reckoning alone because you could recalibrate your location.
I'm pretty sure it would work so long as the ceiling were reflective enough. If it was acoustic dampening foam tiles, that might make picking up the reflection difficult.
What if... and mind you I am just speaking off the cuff here... You had an IR receptor on your bot that looked at the ceiling. Then you had a set of IR lasers that were passed through a laser line generator and shown at the ceiling. These lines could be scanned across the ceiling using mirrors one going across in the X direction and the other in the Y direction. information could be pulsed to the laser in turn at each orientation, then advanced to the next orientation and different information pulsed (i.e. a code for say the current angle). You could in theory set up a rudimentary means of triangulation based upon what information was flashed at the ceiling directly above your roving robot. In this way, the robot could glean an X,Y fix in the room, by simply reading the information from above.
Well not totally... The potentiometer (if I understand things correctly) constitutes a voltage divider. So you are measuring a voltage difference between that median voltage and the voltage flowing through the FET. In the case of this circuit the supply voltage is 9V and if one assumes that the potentiometer is centered resistance-wise... one would assume that a voltage flowing through the FET below 4.5 volts would be considered a "negative" result... Or am I mistaken?