If the same key and initialization vector are used for encoding and decoding, this problem is not associated with decoding data, but with encoding data.
After you call the Write method on the CryptoStream object, you should ALWAYS call the FlushFinalBlock method before the Close method.
The MSDN documentation on the CryptoStream.FlushFinalBlock method states:
"Calling the Close method will call FlushFinalBlock ..."
https://msdn.microsoft.com/en-US/library/system.security.cryptography.cryptostream.flushfinalblock(v=vs.110).aspx
This is not true. Calling the Close method simply closes the CryptoStream and the output stream.
If you do not call FlushFinalBlock before Close after writing the data for encryption, then when decrypting the data, calling the Read or CopyTo method for your CryptoStream object will raise a CryptographicException (message: "Filling is not allowed and cannot be deleted").
This is probably true for all encryption algorithms derived from SymmetricAlgorithm (Aes, DES, RC2, Rijndael, TripleDES), although I just checked this for AesManaged and MemoryStream as the output stream.
So, if you get this CryptographicException during decryption, read the value of the Stream Length output property after you write your data for encryption, then call FlushFinalBlock and read its value again. If it has changed, you know that calling FlushFinalBlock is NOT mandatory.
And you do not need to do any additions programmatically or choose a different value for the Padding property. Filling is a method of the FlushFinalBlock method.
.........
Additional note for Kevin:
Yes, CryptoStream calls FlushFinalBlock before calling Close, but it's too late: when the CryptoStream Close method is called, the output stream also closes.
If your output stream is a MemoryStream, you cannot read its data after closing it. Therefore, you need to call FlushFinalBlock on your CryptoStream before using encrypted data written to a MemoryStream.
If your output stream is FileStream, things are worse because recording is buffered. As a result, the last bytes written may not be written to the file if you close the output stream before calling Flush for FileStream. Therefore, before calling Close for CryptoStream, you must first call FlushFinalBlock for your CryptoStream, and then call Flush for your FileStream.