This is not hard to understand. You told GetBytes to return the size of the first column in the data, which is NOT a text or image column. You have to tell it which column, starting from 0, contains the image data.
Looking at the SELECT statement you wrote, the image data is in column 3, not 0. So, you GetBytes call would look like this:
Dim len As Long = dr.GetBytes(3, 0, Nothing, 0, 0)