If you're displaying this view once for each image selection, then you will be creating a memory leak by allocating the image picker, but not releasing it.
The Apple sample releases the UIImagePickerController after an image has been selected. Your code doesn't do this.
This is the way to do it:
[picker release];
or
[picker autorelease];
From the code you posted, you're not doing this, so the previous allocs are sitting around in memory.
The reason your solution below alleviates the problem is that because you're conditionally allocating the picker, you only do it once.
Just thought I'd point this out to solve the mystery