To answer your question, it's important to note what type of convolution you're doing. If you have two inputs of length N, for example, and you do ifft(fft(x).*fft(y)), you're doing a circular convolution of x and y.
It sounds as if what you want is a linear convolution, but only selecting the center portion of the linear convolution (to get something that is the same size as one of your inputs). In "conv2", this corresponds to passing in the 'same' flag (note: the 'valid' flag actually gives you a smaller result, because it only computes the convolution at shifts where both inputs fully overlap).
What you want, then, is something like this:
M = size(x);
N = size(y);
z = ifftn(fftn(x, M+N).*fftn(y, M+N));
z = z(ceil(N(1)/2):(ceil(N(1)/2)+M(1)-1), ceil(N(2)/2):(ceil(N(2)/2)+M(2)-1));
Or, alternatively, use conv2 with the 'same' flag.