Probably, the initialization of the sf::Sprite instances is the problem. Could you show the function that takes care of that (probably the constructor)?
Your code is not wrong, but some things can be improved:
//first check to see if there are enemies to draw
if( enemies.size() > 0 )
This is not necessary, since the iterators begin() and end() in an empty container are equal, so the for loop body is never reached.
//create an iterator to traverse the list
list<Enemy>::iterator enemy;
I would declare it inside the for loop, so that it doesn't pollute the surrounding scope. This might be of advantage in more complex functions, however it's not a crucial issue.
enemy++
Always use pre-increment if you don't evaluate the expression. While post-increment (enemy++) copies the variable, increments the original and returns the copy, pre-increment (++enemy) just increments the object, which is especially for non-trivial iterators much faster.
(*enemy).getSprite()
There is a short syntax for that: enemy->getSprite()
So, a simplified version of your function might look like this:
void EnemyManager::draw(sf::RenderWindow & screen)
{
//go through the list of enemies from start to the end
for(list<Enemy>::iterator enemy = enemies.begin(); enemy != enemies.end(); ++enemy)
{
//draw each enemy inside the list
screen.Draw(enemy->getSprite());
}
}