It pays to regularly check seating allocation when flying on a 747.
Does it ever. I had almost the identical experience to the OP. Booked J 11 months out SYD-NRT 747 (Skybed Mk1) and selected 16J & K (I think exit rows upper deck). I checked those seats every month until that flight. They changed the aircraft twice - once to the Skybed Mk2 and then back to Mark 1 again. Regardless of the fact I dutifully kept reselecting seats and had actually checked them day of departure again, when we arrived at the airport I was in something like 23-whatever and my wife wasn't allocated at all. Naturally I stated my case with some conviction and we ended up in Row 3 old F seats which were great actually. I've never been pushed out of a seat to a lesser seat with VA, but that's not to say it won't happen, it's just reality.