It seems that when using getArrayRegion on a 3d data array, only the first slice of the returned data cube is correct when the ROI is out-of-bounds of the image. Using a simple example that's been offered here on the mailing list:
win = pg.GraphicsWindow()
view = win.addViewBox()
data = np.random.normal(size=(100,100,100))
img = pg.ImageItem()
img.setImage(data.mean(axis=0)) # img x and y axes are data axes 1 and 2
roi = pg.RectROI(pos=[120, 120], size=[20, 20])
view.addItem(img)
view.addItem(roi)
## let user move ROI, then pull out selected region:
roiData = roi.getArrayRegion(data, img, axes=(1,2))
print roiData.shape # returns (100, 20, 20)
print roiData[0] # returns all zeros
print roiData[1] # returns data
The first slice of roiData (roiData[0]) is correctly blank. However, all subsequent slices contain data that should not exist.