Is there a way to update multiple Raspberry Pi machines at the same time? Would it be possible to update them from a single copy of the image on the central Ubuntu PC server so that the download takes place only once?
The amount of Pis is 40.
You might want to look at Andrew Mulholland's work on Raspi-LTSP which uses a centralised controller for multiple Pis. It essentially uses the Pi as clients to connect to the central 'server' which can be a laptop or desktop machine. http://pi.gbaman.info/?p=256
Since the Pi boots from an SD card, you need either to update 40 cards using 'dd' to copy an image from your Ubuntu server, or use a bootable image like http://elinux.org/RPi_U-Boot that will pull the rest of the configuration from a TFTP server.
Don't mean to revive a dead question, but I've been using Ansible to great effect. You can take a look at https://github.com/heisters/node-omxplayer-sync-devops to see how I'm approaching it. It's nice because it just uses SSH, and doesn't require a client install on the pis.
I would suggest to do as they do in most companies to manage a large amount of machines / a cluster / ... and use Puppet/Chef
Here is an article on how to install it.
You can use a dedicated over-the-air software updater to get safety (rollback in case of any failure) as well as control (deploy to groups, get status & logs, etc). Mender supports Raspbian updates: https://hub.mender.io/t/raspberry-pi-3-model-b-b-raspbian