Quando os dados fluem pela Internet, o upload e o download são usados.
Se você fizer o download de algo, toda vez que uma série de pacotes tiver sido baixada, um pacote de upload será enviado de volta para confirmar que o download estava correto. Se você fizer upload de algo, toda vez que uma série de pacotes for carregada, o cliente aguardará para receber o pacote de confirmação que ele baixa.
Mesmo com velocidades de download rápidas, pode acontecer que o canal de upload esteja cheio. Se isso acontecer, o download trava porque o envio desse pacote de confirmação está parado.
Por causa deste princípio, sempre que sua conexão é medida (ping), a mesma coisa se aplica. Você envia seu ping para o servidor remoto, o servidor responde e seu cliente aguarda o pacote de confirmação.
O que acontece no seu caso é que o canal de upload está constantemente cheio, causando congestionamento. Devido ao congestionamento, a conexão fica lenta e os pings aumentam drasticamente de, digamos, 10-50ms para 300ms ou mais.
A melhor maneira de combater seu problema é limitar a conexão para que os limites de upload e download nunca sejam atingidos ou configurar uma Qualidade de Serviço que priorize determinados pacotes em detrimento de outros (e também mantenha um limite de largura de banda geral.
EDIT: Dito isto, deve-se notar que o próprio ping é o tempo que leva de um pacote para ir do seu computador para outro. Mesmo com velocidades baixas, se o computador estiver próximo, o ping será baixo, se o computador estiver longe, mesmo com velocidades rápidas, o ping será alto. Mas no seu caso, quando às vezes a conexão tem um ping baixo, enquanto outras vezes tem um ping muito alto, isso é definitivamente devido ao congestionamento.