Hi Pete,
I won't revisit all the arguments about pseudorandom number generators: we've all been there before, and you simply aren't prepared to accept the correctness of them. However, I will make 2 points:
1) I have tested the code you posted in December to check that it has a clear flaw, unrelated to the randomness of the output: the function does not always return (i.e. if D% is not negative (bit 32 not set)). With the code shown, this simply results in the code terminating early: if this doesn't happen with your main program presumably it is because program execution is dropping through into some subsequent code (another function?). This may be producing very erratic behaviour, and is surely not intended.
2) If you are reseeding the RNG using TIME, but resetting TIME more than once a second, presumably that's limiting your seeding to a range of less than 100 values, which will seriously limit its options...
Best wishes,
D