I was able to correct this by making alterations to the sencha-touch-all-debug.js file. In the constructor definition for Ext.data.Model (around line 45762) is where my edits come in.

Line 45762: data = data || convertedData || {};
Changed to: me.data = data || convertedData || {};
Reasoning: The original code was updating the local variable 'data' but shortly after the code checks 'me.data' for the id and it of course isn't set because 'me.data' is an instance variable. I simply made the assignment to the instance variable instead of the local variable.

Line 45768: data[idProperty] = me.internalId = id;
Changed to: me.data[idProperty] = me.internalId = id;
Reasoning: Same reason as before: the original code was updating the local variable instead of the instance variable.

Line 4596: me.id = me.getIdentifier().generate(me);
Changed to: me.internalId = me.id = id;
Reasoning: The if statement before this line checks if the id is set and if not it generates the id. The else statement where this line is was for some reason calling the id generation, too. This shouldn't be because an id was already given that should be used.

model.id is only used internally for the event system. It is not supposed to be accessed directly. In Sencha Touch 2 no properties should EVER be accessed directly. Instead you should be relying on getter and setter functions. In your case you can get the record id by using record.getId(). The id is stored like any other fields inside the data fields of the record. This means if you use the default id field, you can also get the id by using record.get('id') which is exactly what record.getId() does.