To expand on PolyGeo's answer as I had the same problem. What is most likely happening is that the layer in which you have your sample points is probably in a different Co-ordinate Reference System than that of the Raster Image.
It may look like both layers are co-incident but this could be simply a display feature caused by "on the fly" CRS transformation. This makes it look like all your layers are in the same projection but in reality they may not be. Turn this off and see what happens.
If they are not then when you run the point sampling tool, it does run correctly but since the layers aren't coincident there is nothing i.e null values "beneath" your sampling points layer.
Make sure that both your vector layer and rastor layer are definitely in the same CRS. I had this exact same problem and this was the solution. Simply selecting the CRS in the layer properties isn't sufficient. You may need to perform a projection transform of one of you layers by right-clicking -> Save As and creating a shape file in the new projection.
For example, I had a large bathymetry polygon layer which I wanted to find the depths at specific locations. I created a vector layer with my sampling points from an ascii files with UTM32 co-ordinates. It turned out however that my bathymetry polygon data was delivered in UTM33 (despite the actual location being located in UTM32.). The solution was to transform the sampling point layer to a shapefile in UTM33.