Two possible explanations:
1. Expedia (and a few other agencies) buy seats from BA to resell, or get a certain number of seats to potentially sell to passengers. The inventory for these is controlled by Expedia, not BA. Expedia also control the price where they have bought the seats from BA outright (BA simply isn't allowed to tell Expedia what to charge - a supplier cannot tell a distributor what to resell a product or service for - it's illegal). Normally this inventory will be a similar or slightly higher price than available from ba.com, but in times of heavy demand or fluctuating demand anolmalies like this do happen.
2. Expedia is quite bad about giving initial fare quotes based on availability last time it checked, which may have been some time ago. The site only actually checks the fare when you start to enter your passenger details. Often this leads to messages such as "We're sorry - the price has changed from GBP1500 to GBP4000". So another explanation is that the seats are not really available at that price.
In short, if it's cheaper then by all means buy through Expedia or claim via the BA price promise.