Вместо сброса источника в начале обработчика Media_Ended попробуйте установить значение Position в исходное положение. Свойство Position - это TimeSpan, поэтому вы, вероятно, хотите что-то вроде.
private void Media_Ended(object sender, EventArgs e)
{
media.Position = TimeSpan.Zero;
media.Play();
}
РЕДАКТИРОВАТЬ 1: Найти подробнее здесь