Looking at the code... Once a second, I coast the motors. After 25 microseconds I start sampling voltage which I do for 3 milliseconds. [note: i played with various values, these are just where i left it which was working] I have no idea how many samples I take or any real details because I didn't actually really inspect it "to the metal".
But i do compare it to the IR sensor results. That works a bit differently. The IR sends a voltage to a pin on arduino. Over some amount its high, and below some amount it's low. I sample the motor 4 times per revolution in the current IR setup. (for bright reflecting patterns on the motor weight symmetrically positioned with black alternating) The pin goes to a interrupt handler in arduino and increments a counter. Once a second I calculate RPM based on the counter and time etc... I take into account (or try) to take into account counter wrap.
The BEMF RPM and IR RPM compare favorably except I said at the "ends" of the power and I don't mean this to be cast in concrete, those were my observations at the time.
On the IR -- one improvement I could make would be to get a solid square wave out the signal -- I didn't bother with this because what I did seemed to work. (I used a hand held RPM reader as a rough sanity check, and looked at the scope and the pin transitions which seemed to compare favorably to my RPM calcs).
Another better improvement there would be a smaller IR package. I looked at some options on digikey but since I actually have no idea what the <blank> I'm really looking for in terms of IR bands and what would be good, etc... I never went further with it.
For HO, I imagine a piece of black/white tape on the HO's motor to wheel connecting rod... and the IR sensor mounted on the chassis in some way to sense the transition in that manner. Many models seem to have this configuration with a motor in the middle and rods to the front/rear wheels -- I guess for diesels at least.
Obviously as you said, BEMF only needs the motor leads.