For the second patch, I'm not sure why you had to remove some existing tests. Also there is no need to make failure messages that explicit:
"Removed nonexistent item 1 from NULL handle\n"
Obviously nothing was removed, because there is no list to remove from.
+ ok(!pImageList_Remove(himl, 3), "Removed nonexistent item 3\n");
+ ok(!pImageList_Remove(himl, -2), "Removed nonexistent item -2\n");
Same here, differences in return value does not mean item that does not exist was removed. Item -2 can't exist in a first place.