Fix #2015

* Billboard was missing a check to ignore calls to set it equal to the value it already was.
* The `cancelled` flag didn't work in all cases.  Instead, check the current value of the image properties in the callback to make sure they're still all the same as they were when the load was initiated.