[quote user="Robert Sprowson"]
So while option (b) does give me a way to proceed, it seems that the debugger is retaining a stale view of the vector contents and showing the live contents in the disassembler/memory views, and my workaround (b) is forcing the debugger to update its interception of the vectors in some way.
[/quote]
After some more experimenting by seeding the vectors with some dummy code that loads various magic values into registers I have discovered that the data cache flush wasn't working properly due to a bug on my part.
From this I conclude that the disassembly view (and memory view) windows are showing the data cache view of the world, but single stepping the debugger executes via the instruction cache - this is why it all looked fine in Code Composer but the behaviour was incorrect.