Sprite sheet usage problem

I have a sprite sheet that I created using Texture Packer. The png file and plist file it generates are in my project.
One of the sprites from the sheet is used as a mask by CCControlSwitch. I have a problem with this particular sprite.

My code to load from the sprite sheet is as follows:

CCSpriteFrameCache *cacher = CCSpriteFrameCache::sharedSpriteFrameCache();
cacher->addSpriteFramesWithFile("cocos2dxGUI/switches.plist");

CCSprite *maskSprite = new CCSprite;

maskSprite->initWithFile("switch-mask.png"); // this works fine

maskSprite->initWithSpriteFrameName("switch-mask.png"); // this does not work

All sprites from the sheet load and work OK apart from my mask. If I include the individual png and load it via initWithFile it works fine. If I load it from the sheet via initWithSpriteFrameName, it behaves strangely. By strangely I mean that the mask seems to be stretched and this effects the positioning of the other items that make up my CCControlSwitch.

I should note that CCControlSwitch applies a shader to the mask texture (see ccShaderEx_SwitchMask_frag.h). It looks as though the shader is seeing the size of the entire sprite sheet (256x256) rather than the size of the mask itself?

I have some kind of similar issues and I use frame values (not offset) from .plst to setPosition of sprite:

@ frame
{{2,113},{605,71}}
offset
{0,0}@