Это нафига устанавливать? По дефолту булеан и так false. А объявление тратит присвоение в байтоде. Это касается всех типов.

Код AS3:
private var waitingForDataToWrite:Boolean = false;
А это работает в объявлении класса? Я просто привык это видеть на "уровне пакета".

Код AS3:
public class Downloader extends EventDispatcher
{
[Event(name = "DownloadComplete",type = "DownloadEvent")]
Это лишнее. Оно само клонируется, если у event есть target.

Код AS3:
dispatchEvent(event.clone());
Похоже, вам проще было отекстендиться от URLStream, чем решать это композицией. Но это уже мое субъективное мнение.
Зачем каждый раз создавать такую штуку?

Код AS3:
var fileData:ByteArray = new ByteArray();
Вы не ищете легких путей.
Может по прогрессу просто писать в буфер, а потом в файл, а по комплиту закрывать файлстрим? Я бы так сделал.