Should that flag be set for any intermediate buffer? It might explain why I was getting terrible frame rates from using an intermediate buffer. Why is it slower? I would have thought it just uselessly uses more memory to preserve it.

It should be set for anything you draw into regularly, as a rule of thumb. It uses more memory AND it's a lot slower. It's not drawing to another texture, it has to download the data off the gpu which is very slow to do each frame.

The default is ALLEGRO_VIDEO_BITMAP afaik. I think it's better to call al_get_new_bitmap_flags to get the flags before you set ALLEGRO_NO_PRESERVE_TEXTURE, then restore the flags to the previously saved value.