I've found the reason for my strange effect, but I'm still in need of a solution. If I try to pass multiple parameters the Commit and Install are called twice during the Installation and the Uninstall is never called. If I pass just one parameter the Commit and Installed are called just once and Uninstall called once as required.
When I pass multiple parameters in CustomActionData, I'm space separating them and if I debug the Custom Action DLL I can see the values of my parameters and they are all valid and passed correctly.
Here's my CustomActionData entry...
/INSTALLTYPE=[INSTALLTYPE] /TARGETDIR="[TARGETDIR]\" /WindowsFolder="[WindowsFolder]\"
So am I passing the parameters incorrectly??