the CCSprite ctor you are using does check for the texture in the cache first. If it finds it in cache, it returns a new ccsprite with the cached object. If not, it puts it in the cache (silently) and returns the ccsprite with the newly cached texture.
If you want to you could remove the texture first from the cache
CCSprite *firstSprite=[CCSprite spriteWithFile:fn];
[self regenerateNewTmpPng];
[[CCTextureCache sharedTextureCache] removeTextureWithKey:@"tmp.png"];
CCSprite *secondSprite=[CCSprite spriteWithFile:fn];
ob cit. cocos2d 2.0, not tested, but should work.