From what I can see, the problem is in Shader::bind().
Inside of here, it does this to bind textures to the shader:
// Bind the textures
shader->bindTextures();
// Bind the current texture
if (shader->m_currentTexture != -1)
glCheck(GLEXT_glUniform1i(shader->m_currentTexture, 0));
Doing a setUniform with a texture puts it into the list of textures used by bindTextures().
Doing a setUniform with sf::Shader::CurrentTexture sets m_currentTexture. So neither immediately apply the texture, it is delayed until binding. Then the order is always manual textures first, then CurrentTexture (if present) replaces texture 0.