I'm becomming more and more convinced this is some sort of immobilizer issue. From this website (I think the car has BMW EWS 3.3): http://www.unofficialbmw.com/images/BMW_EWS.pdf
The starting sequence of the EWS III (3.3) is as follows:
• The key is inserted into the lock cylinder and switched “ON”. The EWS III (3.3) control module is powered through KL R and sends a 125kHz AM signal to the ring antenna. The AM signal induces voltage in the key coil and powers up the transponder.
• Powered up, the key transponder sends the key identification code to the EWS III (3.3) module. The EWS III (3.3) module verifies the key identification code and checks to see if the key is enabled. If the key is correct and enabled, a password is sent to the transponder over the 125kHz AM signal through the ring antenna.
• When the transponders accepts the password, it releases the changing code which it received from the EWS III (3.3) module during the last start-up operation to the EWS III (3.3) module via the ring antenna.
• The EWS III (3.3) module compares the changing code received from the transponder with the code stored in its memory and if they match the process is allowed to continue. The EWS III (3.3) module looks at the other inputs for correct status (e.g. Code function not active, Transmission in P or N or clutch depressed, engine speed below specified RPM) and energizes the the internal relay to begin starter operation.
New to EWS III (3.3):
• While energizing the internal starter relay, the EWS III (3.3) module calculates a stored code from the “Rolling Code Table” and sends the calculated results to the DME.
• On receipt of the “Rolling Code” from the EWS III (3.3) the DME calculates it’s own stored code and compares its results with the code it received from the EWS III (3.3). If the “Codes” match the drive away protection is released and injection and ignition are enabled and the engine starts. If the “Codes” do NOT match, the DME “rolls forward” to the next code according to the “Rolling Code Table” and makes the same calculations. The DME continues this “forward roll” up to a maximum of 200 times or until a match is found. Failure to find a match will result in the engine cranking but not starting.
• When the ignition is switched off and no engine RPM is present in both the DME and the EWS III (3.3) control module each module will automatically “roll forward” to the next predetermined code based on the “Rolling Code Table”. This new code is used for the next starting sequence.
There is also this GEM:
Workshop Hint: If during diagnosis the key is switched on while the DME or EWS modules are “Disconnected”, the alignment procedure will need to be carried out. The “Alignment” procedure may be carried out an umlimited number of times.
I don't know the alignment procedure yet, but I can certainly see how an engine block short may make the DME or EWS look like they were "disconnected" while the key is in the on position. Maybe I just finally "rolled forward" enough codes to get to one that matched...
It seems from the above that if the key is recognized, the starter will turn. But after the starter is turning there is still a rolling code table process that has to match between the ECU and the Immobilizer module to allow the engine to start.