I'll post a short testcase here, because GrapefruiTgirl seems to agree with me, that there's nothing wrong. This is a tad shorter than what the OP posted, but nevertheless..
First, let's set up some files. Two that contain "a" and one that does not. When looking for files containing "a", we ought to find the two, of course, and not the third one.
Code:
cd /tmp
echo "a" > a
echo "b" > b
echo "a b" > ab
Then find and xargs combination
Code:
find -type f |xargs grep -l "a"
which produces output
Same again, with redirection to out.txt
Code:
find -type f |xargs grep -l "a" > out.txt
and looking inside of the out.txt file,
produces
As a sidenote, you don't necessarily need to use xargs:
Code:
find -type f -exec grep -l "a" '{}' \;
produces
which is the very same output.
Cleaning up the temporary files:
So, to conclude, there ought to be nothing wrong here, except for the results find produces. Before passing the results on, you should check that you find what you're looking for.