Fully convolutional networks (FCNs) replace dense layers with $1\times 1$ convolutional layers in order to handle different input sizes: as $K\times K$ kernels are applied to spatial locations that can vary in number, instead a dense weight matrix has a fixed shape that can't adapt to a different input dimensionality.
Now, what about an input image that is smaller than the ones used for training?
I think the elements to consider are the following: kernel size, padding, strides and pooling layers. Considering a fixed kernel size $K$ for each convolutional layer, each time we apply a conv the activation volume will be smaller in size (width and height) unless padding is used. The same is true for strided convolutions and pooling layers: they shrink the output by a given factor (e.g. $2$).
Suppose there are $L$ conv layers (without padding), and $P$ pooling layers with stride $2$, the total stride of the model is: $S=(K\times L) + 2^P$. This means that, in principle, $H\times W$ input images should be larger than the total stride, i.e. $H\ge S+1$ and $W\ge S+1$ (indeed, considering appropriate rounding to the integer part.)
So the penultimate activation map should be at least $1\times 1$ in size in order to be processed by the last point-wise convolution that makes dense predictions.
NOTE: I haven't verified this in practice, but I want to provide some intuitions and these are indeed practical constraints in order for convolutions or pooling to work at all: you cannot slide a kernel on an image that is smaller than the kernel itself. So, extending this to multiple layers you obtain $S$ (that I call the total stride, but I don't know if there is a proper name for this.)