From MSDN: 
The Windows operating system notifies your component of file changes in a buffer created by the FileSystemWatcher. If there are many changes in a short time, the buffer can overflow. This causes the component to lose track of changes in the directory, and it will only provide blanket notification. Increasing the size of the buffer with the InternalBufferSize property is expensive, as it comes from non-paged memory that cannot be swapped out to disk, so keep the buffer as small yet large enough to not miss any file change events. To avoid a buffer overflow, use the NotifyFilter and IncludeSubdirectories properties so you can filter out unwanted change notifications. 
If increasing the buffer size is not sufficient and you cannot control how many files are triggering events at a time you would have to add additional polling.
See also this related question:
FileSystemWatcher does not work properly when many files are added to the directory at the same time…
Update:
It might be tempting to simply increase the buffer size but this should be done with care. In fact, there is a 64k limitation when it comes to network access. The FileSystemWatcher class is using the Windows API function ReadDirectoryChangesW underneath which has this limit:
ReadDirectoryChangesW fails with ERROR_INVALID_PARAMETER when the buffer length is greater than 64 KB and the application is monitoring a directory over the network. This is due to a packet size limitation with the underlying file sharing protocols.
If you want to get a deeper understanding on the cost of modifying the buffer size you should have a look at the post of Walter Wang of Microsoft here:
FileSystemWatcher across the network (full post quoted below)
I'm sorry that the documentation of
  FileSystemWatcher.InternalBufferSize
  didn't state very clear about the
  buffer size when monitoring network
  path. It's recommended not exceeds 64K
  when monitoring network path.
FileSystemWatcher is basically a .Net
  wrapper for the Win32
  ReadDirectoryChangesW API. To use
  ReadDirectoryChangesW, you create and
  specify a buffer that the OS will
  populate with the changes. However,
  what is not mentioned in the
  ReadDirectoryChangesW documentation
  (but is hinted in the
  FileSystemWatcher docs) is that the
  file system creates an internal kernel
  buffer to store the change information
  temporarily until it has the chance to
  update the user buffer. The size of
  the kernel buffer that is created is
  the same size that is specified in
  ReadDirectoryChangesW and is created
  in non-paged pooled memory. Every time
  a FileSystemWatcher /
  ReadDirectoryChangesW is created /
  called, a new kernel buffer is also
  created.
The kernel memory pools (paged and
  non-paged) are set aside in the system
  address space for device drivers and
  other kernel components to use. They
  grow and shrink dynamically as
  necessary. The current size of the
  pools can be easily seen by going to
  the Performance tab of the Task
  Manager. The pools will grow
  dynamically until they hit a maximum
  value which is calculated at boot time
  and depends on available system
  resources (mostly RAM). You do not
  want to hit this maximum value or else
  various system services and drivers
  will start failing. However, this
  calculated maximum value is not easily
  available. To determine the maximum
  pool sizes, you need to use a kernel
  debugger. If you are interested in
  further information about the system
  memory pools, I recommend that you
  look at Chapter 7 in the MSPress book
  Inside Windows 2000 by Solomon and
  Russinovich.
With this in mind, there is no
  recommendation on what size buffers
  you can use. The current and maximum
  size of the system pools are going to
  be varied from client to client.
  However, you probably should not go
  over 64k for each FileSystemWatcher /
  ReadDirectoryChangesW buffer. This
  stems from the fact that there is a
  64k limitation with network access as
  documented in ReadDirectoryChangesW.
  But in the end you are going to have
  to test the application on a variety
  of expected target systems so that you
  can tune your buffer.
There is overhead associated with .Net
  applications and I imagine that a
  Win32 ReadDirectoryChangesW program
  might be able to achieve better
  performance with the same buffer size.
  However, with very fast and numerous
  file changes, buffer overruns will be
  inevitable and the developer is going
  to have to handle the case when an
  overrun occurs such as manually
  enumerating the directory to detect
  the changes.
In conclusion, FileSystemWatcher and
  ReadDirectoryChangesW are a
  lightweight file change detection
  mechanism that is going to have its
  limitations. Change Journals is
  another mechanism which we would
  consider a medium-weight solution, but
  would still have limitations:
http://msdn.microsoft.com/en-us/library/aa363798%28VS.85%29.aspx
Heavy-weight solutions would be to
  write a dedicated file system filter
  driver that sits in the file system
  stack and monitors file system
  changes. Of course this would be the
  most complex approach. Most virus
  scanners, backup software, and file
  system monitoring utilities such as
  filemon (www.sysinternals.com)
  implement a filter driver.
I hope above explanation helps you to
  understand the root cause of the issue
  you're experiencing. Please reply to
  let us know whether or not you need
  further information. Thank you.