Daniel,
Thank you for getting back to me. From trial and error I managed find that C40_CODE_ARRAY_0_BLOCK_3_S500 worked for me so have been using that. Thanks to you I now understand why.
The hard exceptions seemed related to cache data flushes, which I did not investigate thoroughly. I found that if I disabled the C40_Ip driver option Mem Synchronize Cache the issue went away, although it did raise a concern over data integrity. Is this an acceptable approach or should I go back and look more closely at the exception?
The last issue I was having was that even though the block chosen is near the end of the flash, reprogramming via a debugging session could on occasion erase the block, even though the code size is relatively small. Why only on occasion I have no idea. However there are some settings in the PEmicro tab, under Advanced Options which allow you to specify Non-Volatile Memory Preservation ranges. Adding my flash sector appears to have stopped the sector from being erased.
Thank you again for your insight
Simon