Sorry, I cannot point you to additional information. Try searching for 'in-application programming' (IAP).
A number of different setups can be used to perform firmware updates in the field:
1) The traditional approach is to split the firmware into 2 parts: monitor and main application. The monitor is launched when a firmware update is required. It handles the update process, overwriting main application as needed. The monitor itself cannot be updated. This approach leads to simple flash memory partitioning: monitor flash area and main application flash area. Some code duplication may result: e.g. TCP/IP support would be contained in both monitor and main application.
2) The main application itself can be designed to be able to update itself. During the update process, the new firmware image has to be stored somewhere while the previous one is running. Once the new image is stored, some way of switching over to the new firmware image must be implemented (perhaps involving a small monitor program.) More memory is required than with previous method. And the switchover part can be tricky to implement.
Both approaches can be made fault-tolerant in the sense that a power supply failure during firmware update won't brick the device.