To avoid the bottleneck of the very expensive CPU-GPU transfer, it’s better to render the fog of war on the GPU using a framebuffer (FBO) (but PBO might work too) and a 2D texture with a circle on it. If the line-of-sight is simple then the fog-of-war is very easy to do:
- At the start of the game create an FBO and attach a 2D GL_ALPHA8 texture to it with the size of the map (in your example 300x300 pixels).
- Also load or generate a 2D GL_ALPHA8 texture with a circle, maybe 64x64 or 128x128. Preferably also generate mipmaps for this texture.
When rendering the minimap:
- Bind the FBO. IMPORTANT: Remember to set the viewport and the matrix settings (glOrtho)!!! This is VERY easy to screw up when using FBOs.
- Enable blending and set glBlendFunc to (GL_ONE, GL_ONE).
- Set glColor4f to (1, 1, 1, 1) (The alpha value is the only important one, all others are discarded as we are rendering to an alpha texture)
- Bind the circle texture.
- Draw a GL_QUAD for each unit with vision with the circle texture to create “holes” in the fog-of-war texture. The blendfunc ensures that the circles do not overwrite what’s already drawn and “stacks” properly.
- You now have an alpha texture where visible areas have alpha=1.0f and “fogged” areas have alpha=0.0f!!!
From here on just use this texture either with an overlay quad, multitexturing (and maybe a shader) to put it on top of the minimap, depending on how you store the minimap terrain.
- If you have the terrain as a texture, just bind the terrain texture to active texture 0 and the fog of war to texture 1. Then use either the multitexturing settings or a shader to output (terrainColor * fogAlpha) in some way.
- If you render the terrain as geometry or for some reason don’t want to use the kinda complicated above method, it’s easier to just draw the terrain “unfogged” and then drawing the fog-of-war texture on top of it. Basically just bind the fog texture, set glColor4f to (0, 0, 0, 1), enable blending with blendfunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA) and draw a GL_QUAD over the minimap.
When you grasp the concept it’s actually pretty easy. If you’re already experienced with FBOs, this’ll be a cakewalk. If not, you really should learn to use them, because they are a very powerful tool in OpenGL (combined with shaders)! 
If you ARE experienced with FBOs and want to have vision obstacles (e.g. vision "shadows), feel free to look at this great article: http://archive.gamedev.net/reference/programming/features/2dsoftshadow/. I have implemented the concept but with hard shadows myself and I’m going to use it in a game I’m making for, guess what? Fog of war! ;D
Also, feel free to ask for more details if you don’t understand something. I can also post code examples. =)
Good luck!