That ugliness arose mostly from the fact that the output/execution locations were potentially different between synchronized and unsynchronized projects. If a synchronized project doesn't explicitly set the output directory then the default output location is sometimes the user's home directory or a scratch directory, which is generally not what you want when you're generating a lot of performance data, so it was necessary to make the execution happen in the project directory which is where unsynchronized projects ran by default if I remember correctly.
There was a similar issue with the build path. I believe the PTP had different internal variables and a different way of storing the executable location so it was necessary to check for both the regular CDT location and the PTP/synchronized location. Things may have become more consistent now. I think I had been bitten by the storage method changing a couple times so I may have thrown in some redundant checks, probably at this point those are unnecessary. The build wait loop checks on both the programPah and the pathStore. One or the other of those will show up when the build is complete depending on the type of project.
I'm not sure about the full build check. Assuming the field does the same thing on both project types I think the behavior should be the same. I'm not sure why I would have made that distinction.