According to GL spec:
void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); *location* Specifies the location of the uniform value to be modified. *count* Specifies the number of matrices that are to be modified. This should be 1 if the targeted uniform variable is not an array of matrices, and 1 or more if it is an array of matrices. *transpose* Specifies whether to transpose the matrix as the values are loaded into the uniform variable. Must be GL_FALSE. *value* Specifies a pointer to an array of count values that will be used to update the specified uniform variable.
So in my opinion (I've never used OpenTK before) you can use the following function:
static unsafe void OpenTK.Graphics.OpenGL4.GL.UniformMatrix4(Int32 location, Int32 count, bool transpose, Double * value)
Which has the same parameters as the C++ equivalent. Just pass the proper parameters to this function and everything should be ok:
OpenTK.Graphics.OpenGL4.GL.UniformMatrix4(matrices_location, 2 /* count - 2 matrices */, false /* transpose */, matrices /* ref, pointer */);