find output seems to change when piped

Currently, i am trying to create a simple robust script that is intended to move the contents of a given source directory to a target directory. Optionally, the script should allow to either move the whole source dir content, or dotfiles only, or visible files only. I am aware the target directory should not be located within the source dir's tree.

Step I is to obtain all the relevant filenames to be found (directly) below the source dir:
1) any files:
find /source/path -maxdepth 1 -mindepth 1 -print0 -iname ''
2) visible files only:
find /source/path -maxdepth 1 -mindepth 1 -print0 -iname '[!.]
'
3) dotfiles only:
find /source/path -maxdepth 1 -mindepth 1 -print0 -iname '[.]*'

-note the usage of -print0 to assure resulting filenames will be separated by Null char
-output directly to the shell is as expected, 1), 2) and 3) return a string containing all, visible, hidden files' names respectively.

Step II is to pipe the results to "xargs" invoking "mv" to perform the actual source content relocation
1) resulting command using I-1:
find /source/path/ -maxdepth 1 -mindepth 1 -print0 -iname '*' | xargs --null --no-run-if-empty mv --target-directory=/target/path
2), 3):
-iname option within "find" changed according to I-2, I-3

The odd thing is, II-1, II-2, II-3 all yield the same result which is that any contents of the source dir are moved to the target dir. So I am left with the question where this goes wrong:
a) does the "find" output look different when piped through vs. written to the shell?
b) is the globbing used within find correct after all?
c) is the "mv" invocation within "xargs" done correctly?

Any enlightenment would be greatly appreciated!

---------- Post updated at 03:57 PM ---------- Previous update was at 03:37 PM ----------

After some playing around, it actually appears to be a problem within find:
any time the -print0 option is used as within Step I, the find output contains all directory contents.

After putting this option behind the "-iname ...", it seems to work correctly, like this:
find /source/path -maxdepth 1 -mindepth 1 -iname '[!.]*' -print0

Should have tried this first, but did not stumble upon a hint towards "options order" within the find man pages.