Try:
\b(?!POD_BCD)[A-Z]([A-Z0-9_])*:[a-z]([a-zA-Z0-9_])*
What this does is to check that there is something before the name that is not part of the name (I'll explain shortly!) then checks that what follows is NOT "POD_BCD" and finally uses your pattern to match whatever is there.
The simple thing is to simply put the negative lookahead at the start of your pattern. Unfortunately this is defeated by the natural behaviour of the regex engine which is to advance the starting point of a match if the pattern as a whole fails. If you leave off the '\b', what happens is that the match keeps failing until it gets to the "POD_BCD :is_ad_intup_bcd" (for example). AT this point the negative lookahead will fail and so the "P" will be skipped. Now the negative lookahead will succeed and so with the rest of the pattern, thereby returning a match of 'OD_BCD :is_ad_intup_bcd".
Therefore you need a way to force the first part of the name to be treated as a whole. Atomic groups are an option but without something to anchor the start of the match they are not effective in this case. Another alternative is to use a negative lookbehind after the first part of the name has been matched (atomically) and the ":" found - but VBScript does not lookbehinds.
Therefore the '\b' acts as an anchor at the start of the name that does not allow a partial match of the first part that starts from the 2nd letter.
I must admit that I'm normally a bit wary of the '\b' anchor as it can work in strange ways in some circumstances (what the regex considers a "word" character is not always what we might think) but in this case it should be alright.
I hope this makes sense.
Susan