Let's say I have a Swampert that knows Surf, and I'm in a double battle against two identical Pokemon (EV's, IV's, items, the works). If I use the move, will it deal the exact same damage to both of them or is it slightly random?
Looking the damage calculation formula, there's a random modifier applied to damage dealt by a move.
randomis a random factor between 0.85 and 1.00 (inclusive):
From Generation III onward, it is a random integer percentage between 0.85 and 1.00 (inclusive)
In Generations I and II, it is realized as a multiplication by a random uniformly distributed integer between 217 and 255 (inclusive), followed by an integer division by 255
So to answer your question, the damage calculation is performed individually against both Pokemon and it's likely that your Swampert's Surf will deal different damage to both targets.