Your problem boils down to the fact that \IfStrEq is not expandable, but \IfFileExist tries to expand it nevertheless. Essentially, \IfFileExist does the following: (#1 is your file, here \IfStrEq...)
\openin\@inputcheck#1\relax % open the file
\ifeof\@inputcheck % did the file exist?
File exists.
\else
\@iffileonpath {#1} % search in \input@path
{File exists.}{File doesn't exist.}
\fi
The TeX primitive \openin takes the stream number \@inputcheck as its first argument, then expands as much as it can, grabbing characters for a file name until encountering a space (which it removes), or a non-expandable command. If the file name #1 is made of characters, or expands to it, then the file name that \openin finds stops at the \relax, and \IfFileExists searches for the correct file. In your case, though, \FileWithPath expands from the left as much as TeX can, until reaching the unexpandable command \let. At this stage, no character has been encountered (as expected: nothing is typeset before \IfStrEq actually starts doing its tests), so \openin finds an empty file name.
But the whole \FileWithPath is still there, just expanded a little. As you expect, \IfStrEq typesets nothing, but the rest of the path is typeset. Then comes the \ifeof test: since your TeX distribution contains a file .tex (you can find its path by trying \input\relax), the empty \openin has opened that file in the stream \@inputcheck, thus the \ifeof test is true. The branch File found of the conditional is taken, making us think that everything has gone well.
So... how to fix that? Use an expandable string comparison, for instance. The package expl3 (from the l3kernel bundle), which you are loading anyways through xparse, provides \str_if_eq:xxTF and \str_if_eq:nnTF which should suit your needs (the first expands its arguments as in an \edef before comparing them character by character; the second doesn't expand). To use such a "code" command, we need to go to the "Expl Syntax".
\documentclass{article}
\usepackage{xcolor}
\usepackage{xparse}
\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\GetTexFilePath}{m m m}
{
\str_if_eq:xxTF{#1}{SpecialValue}{}{}
../../../#1/#2/#3
}
\ExplSyntaxOff
\begin{document}
\def\FileWithPath{\GetTexFilePath{01}{02}{z}}%
\IfFileExists{\FileWithPath}{%
\textcolor{red}{File \FileWithPath\ found.}%
}{%
\textcolor{red}{File \FileWithPath\ not found.}%
}%
\end{document}
[Edited to replace \NewDocumentCommand by \NewExpandableDocumentCommand: even though the former happens to work in this situation, in general, it defines a non-expandable command, and that will most often not expand, getting you back to the expansion problems described in the first part of this answer.] [Re-edited: Peter Grill mentions that \NewExpandableDocumentCommand does not exist.]
Alternatively, you could use the slightly weird primitive \pdfstrcmp (or \strcmp in XeTeX, or, in LuaTeX, some command provided by Heiko?), which takes two arguments (expanding them as an \edef), and expands to -1, 0, or 1 depending on the lexicographical ordering of the strings, 0 if they're equal.
EDIT: Given your further question, I think a simpler approach is to "compute" the full paths when defining \FileWithPath instead of defining \FileWithPath to compute the paths. To do that, replace \def\FileWithPath{...} by a call to an assignment function \defTeXFilePath which performs some checks (expandable or not), and then decides what to store in \FileWithPath. Here I went for \tl_if_eq:nnTF instead of \str_if_eq:xxTF. Differences: "tl" instead of "str" means that we are comparing tokens, with their character code and category code, instead of simple strings (I think of that as colour versus black and white); "n" instead of "x" means that we perform no expansion. Feel free to change that to suit your needs.
\documentclass{article}
\usepackage{xcolor}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\defTeXFilePath}{m m m m}
{
\tl_if_eq:nnTF{#2}{SpecialValue}
{ \tl_set:Nn #1 { ../../../#2/#3/#4 } }
{ \tl_set:Nn #1 { ../../../#2/xxx#3/#4 } }
}
\ExplSyntaxOff
\begin{document}
\defTeXFilePath{\FileWithPath}{01}{02}{z}%
%\show\FileWithPath % see that \FileWithPath contains no macro call.
\IfFileExists{\FileWithPath}{%
\textcolor{red}{File \FileWithPath\ found.}%
}{%
\textcolor{red}{File \FileWithPath\ not found.}%
}%
\end{document}
\edef\FileWithPath..same problem. (2)\def\FileWithPath{...}problem gone. (3) Using\FileWithPathworks as expected. The only thing that goes wrong is using\FileWithPathand\IfFileExistsin combination. This may also be related toxparse, which is why I added it to the list of keywords. – Jan 30 '12 at 07:22