On another note, I notice sometimes Keyhunt doing strange things like this, even when the range is specified. Any ideas?
for your second question, the Keyhunt behavior is not strange, that's the nature of compress mode, it checks both side of the elliptic curve for any given key.
Well more or less is that last answer but i need to extend it and explain it here just to clarify this and the speed calculation.
The Point in an Eliptic Curve is made with two integers (X,Y), right? For any point there is a Point negation where you need to subtract the Order or the curve to the Y value
Both points (Original and Negated point) has the same X value, Since the Module Operations the Y values one is EVEN and the other is ODD, for compressed keys in bitcoin documentation this Y parity determine if the prefix byte of the public key is 02 or 03.
Now for some math and code efficiency there is way to calculate ONLY the X value of others points round a Single point A Example:
...
Another Point (-3)
Another Point (-2)
Another Point (-1)
Point A
Another Point (+1)
Another Point (+2)
Another Point (+3)
...
We can know the X value of all other points (WITHOUT the necessity to calculate Y value). This save us time of execution, because we can append to that X value the prefixes 02 and 03 without calculate Y real value.
When its necessary to calculate Y? Well only when you HIT a target key and you need to calculate the private key (in that case you must know the parity).
How this affect the speed?
Lets to say that you current speed is 200 Mkey/s, this speed is checking both points Original and negated (remember we only calculate X value and just append 02 and 03)
This mean that 100 Mkeys/s are in the target Range and other 100Mkeys/s are in the negated range (But we can't determine which value is what) until we calculate Y.
But if we calculate Y every time that we generate Another Point and do all the process to determine which is in the target range and which is in the negated range, your final speed will be some 150 Mkeys/s or some other Sub-optimal speed.
That is why the program check Both keys (without know the parity) to get more speed, This for random search in any 256 bit space is perfect because you are checking more keys in the same time.