The Internal Name of a field is set when the field is first created and can never be changed. It can be different from the Title, or Display Name, of a field.

For example, when you create a field and name it "FirstName", "FirstName" is stored as the Internal Name and the Display Name. If you then edit the field and change the Title to "First Name", the field will retain "FirstName" as the Internal Name and set the Display Name to "First Name". Users will see "First Name" as the name of the field. We do this to make coding against the list easier, because in code we refer to the Internal Name and handling spaces in the Internal Name overcomplicates the code.