In both cases you are using imread(). That accomplishes all of the image reading. Using im2double() is processing after the image has been read.
MATLAB routines can generally handle images represented in several different ways, and the different ways are distinguished internally by examining the datatype (e.g., double or uint8) When the datatype is double then the data must be in the range 0 to 1, and the routines are permitted to malfunction if the data is some other range instead. When the datatype is uint8 then the data range is the integers 0 to 255. When you double() a uint8 matrix and pass the result into a MATLAB image routine, the image routine is going to get confused.