Okay, I can 100% reproduce what you get. I don't understand why this is, but I can use this to poke some people at Wolfram.
PS C:\Users\arnou\Downloads> .\program.exe
Initializing NetLink MathKernel ...
Running query:
DensityPlot3D[x y z, {x, -1, 1}, {y, -1, 1}, {z, -1, 1}]
Result:
-Graphics3D-
Mathematica returned 2 images
Saving image #0 to file 'plot_image_0.jpeg'
Saving image #1 to file 'plot_image_1.jpeg'
So far this seems specific to DensityPlot3D (I tried things like Plot3D, ContourPlot3D, and even Graphics3D[Sphere[]] and none of them are showing this behavior).
This is also interesting: Put the DensityPlot3D in a Do loop (as shown) and you get even more images:
PS C:\Users\arnou\Downloads> .\program.exe
Initializing NetLink MathKernel ...
Running query:
Do[ DensityPlot3D[1.0, {x, -1, 1}, {y, -1, 1}, {z, -1, 1}], 3]
Result:
Null
Mathematica returned 6 images
Saving image #0 to file 'plot_image_0.jpeg'
Saving image #1 to file 'plot_image_1.jpeg'
Saving image #2 to file 'plot_image_2.jpeg'
Saving image #3 to file 'plot_image_3.jpeg'
Saving image #4 to file 'plot_image_4.jpeg'
Saving image #5 to file 'plot_image_5.jpeg'
Update: I received an update from our development team and this is an issue (bug) in DensityPlot3D.
It can be reproduced without NETLink as follows:
Block[{$DisplayFunction = Echo}, DensityPlot3D[x y z, {x, 0, 1}, {y, 0, 1}, {z, 0, 1}]]
Update: It's not the only function that has this behavior:
Block[{$DisplayFunction = Echo}, ComplexPlot[0.0, {z, -1 - I, 1 + I}, PlotLegends -> Automatic]]
My recommendation, for now, is to expect one or more graphics being returned to NETLink and using the last graphic as the one to use in your NETLink code.
Another update: I have found a function (and there are possibly others) which do not return any image, even though they should. For example
PS C:\Users\arnou> .\program.exe
Initializing NetLink MathKernel ...
Running query:
ListLinePlot[{1,1,2,3,5,8}]
Result:
-Graphics-
Mathematica returned 0 images
(This will also be reported to the developers...)