DisplayName is documented as being in the form "<configname>|<platform name>"
http://msdn.microsoft.com/en-us/library/bb139670(v=VS.80).aspx
CanonicalName is just the config name such as "Debug" or "Release"
http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsprojectcfg.get_canonicalname(v=VS.80).aspx
In MPFProj get_CanonicalName just calls get_DisplayName, so a string such as "Debug|AnyCPU" is passed out when it should just be "Debug".
The fix is to make get_CanonicalName just to do:
public virtual int get_CanonicalName(out string name)
{
name = configName;
return VSConstants.S_OK;
}