When you're updating a phone, you can use the addLines and removeLines tags to add/remove lines.
According to the documentation, there are three mandatory fields for a Line in this case.. dirn, index and recordingMediaSource.
Due to a bug in my code I was sending index = 0, which CUCM happily processed. The subsequent getPhone yielded the expected result.
But, in ccmadmin, you'd get an error because index 0 is not valid.. and so the line would not be displayed.
I think AXL should enforce a valid value on index.
And for some reason, despite recordingMediaSource being declared mandatory, it works just fine when you leave it out. I guess the doc should says it is optional after all.