Yes, have a look at the GAP Callback, there you can see how the MCU searches the array for the connecting BD_ADDR. It should _Not_ generate the LinkKey once again but rather find it - that's why im guessing that something goes wrong on reading/writing, note that almost every GAP-Event issues a Display() to tell you whats going on.
Yes until today I also dont know what the HCI_Write/Read_Stored_Link_Key() functions are good for; what really confuses me is that in the core API doc they speak of "stored in the Host controller" - so what, either they are stored in the Host OR in the controller, according to the BT spec?? I'll open a thread a long with another question and see what SS1 knows about that.