Thanks for your help.  So, this all comes down to a c_uint is not a np.uint8.  To be compatible it is c_ubyte is equal to an np.uint8.  And beyond that you know I have coded my share of low level memory managers where I have run into such strange things, but I still cannot fathom why you could a) write to the cache, b) read it back and its fine, and only after everything was done were things hosed.  Unless, there is some sort of caching happening under the hood, which is possible.
It now works as it should!