Yep, and this is exactly the problem. You're probably using the latest libmpeg2 installed on your system and thus all VLC versions fail the same way.
If I use VLC-0.8.4 on WinXP (which has older libmpeg2 inside the package) the AR changes into 16:9 together with the scene change (i.e. commercial is 4:3, but CSI is 16:9).
Here is the debug from older libmpeg2-0.4.0 on my Unix box:
First, although the contrib Makefile asks for 0.4.1-cvs, seems that the cvs server in fact returns trunk. There is no STATE_SEQUENCE_MODIFIED in 0.4.1-release but the contrib has it.
Second, VLC's implementation of STATE_SEQUENCE_MODIFIED doesn't work.
It never gets compilled in, since #ifdef STATE_SEQUENCE_MODIFIED is always FALSE (this is defined inside typedef enum and preprocessor fails to see it) and even if I force it manually, VLC complains about unreferenced/invalid pictures.
Thus the solution for 0.8.6 is: use mpeg2dec-0.4.1-release for contrib.
For trunk, the implementation of STATE_SEQUENCE_MODIFIED needs fixing.
As for the error messages - they seem to be quite random - sometimes you get invalid status 6, sometimes it's 14038, sometimes the picture has invalid refcount -1 ...
There's definitely something wrong, since when playing the stream with aspect ratio change, I get green squares for a short moment. Seems that GetAR() breaks something related to reference pictures.
The green squares don't appear when I patch the code to ignore STATE_SEQUENCE_MODIFIED - of course no aspect ratio change happens then.
So libmpeg2 produces correct frames, the problem is in VLC.
Thus it seems that GetAR() is either not enough for aspect ratio change, or it corrupts pointers to reference pictures. Perhaps we need to save pointers to reference pictures before calling GetAR() and restore them afterwards ?