Thank you, I see how what I have done with disposing the pointer can be bad. I have fixed that and the problem went away. It makes sense now that I know what my mistake was.
I have now integrated buffer allocation and reading using DSNewPtr, MoveBlock, and DSDestroyPtr into my application and this has solved the problem that I was having originally. Although I have not run into problems yet with other parts of my code that are doing non-streaming reads from the Picoscope, I may modify them to use this method of buffer allocation anyway. It seems like a better way of doing things. Thank you very much for the help.
You may not need to change everything. For the duration of a Call Library Node, buffers passed to the Call Library Node are guaranteed to be valid. It is when your DLL stores pointers to LabVIEW data handles to use after the function that passed them from the diagram returned execution back to LabVIEW, that things will start to potentially break.
Doing your own low level C style memory management for buffers that are only used synchronously (during the duration of the Call Library Node call) is a total waist of effort.