Encrypt a byte array
Standard disclaimer: in a production setting it is overwhelmingly better to use somebody else's crypto. 

I don't have the expertise to certify "Yes, this is secure" (and as I'm some randomer online, you should assume that even if I was actually a world expert!) There are, however, a few things that strike me as red flags.

byte[] ivSeed = Guid.NewGuid().ToByteArray();


In crypto, if you need a random number, you basically always need a cryptographically secure random number. NewGuid() is not cryptographically secure. 

var messageLength = BitConverter.GetBytes(messageLengthAs32Bits);


Block ciphers like AES do not claim to obscure the approximate message length, so this is not strictly a vulnerability. Nevertheless if you are vulnerable to any attacks based on the length, then passing the precise length in plaintext makes those attacks a whole bunch quicker and easier to execute.

byte[] Key = rfc.GetBytes(16);
byte[] IV = rfc.GetBytes(16);


The derivation of your key should not be tied to the derivation of your IV.