Verification of Sudoku boards
A few general things first:

' is the conjugate transpose, not the transpose. These are the same for real values, but will behave differently when you have complex values. To avoid confusion, it is recommended that you always use .' when transposing a matrix, even if it's real.



You're using both disp('text') and disp('[text]'). The first one works for plain strings, while the other must be used when concatenating strings and numbers. I suggest you either use brackets on all calls to disp, or skip the brackets for all calls to disp where the string is plain text. Consistency is always nice.



Variable names:

The variable names are well chosen and descriptive. One minor comment is that you're using correct_size and correct_board, but blocks_ok. correct_blocks is probably a better word here, to keep consistency.



Frequently used variables:

There are a few variables that are used over and over again. You should declare the following variables outside the loop:

sq_rows = sqrt(rows); 
values= 1:rows;




Avoid the loop and calls to unique by sorting the board by rows and columns:

You can avoid the loops by sorting all columns of the regular board, and the board when it's transposed, instead of checking for unique values.

isequal(sort(board), sort(board.'), repmat(values.',1, rows))


repmat(values.',1,rows) produces a matrix looking like this:

1     1     1     1
2     2     2     2
3     3     3     3
4     4     4     4




Alternatives to repmat(sqrt(rows),sqrt(rows),1):

Using mat2cell to create cell_blocks is good, but the expression can be simplifed using the new pre-defined variables. There are some alternatives to repmat(sqrt(rows),sqrt(rows),1) that are more readable, such as:

ones(sq_rows,1) * sq_rows;
zeros(sq_rows,1) + sq_rows;


repelem is an option if you're using MATLAB version R2015a or newer. 



Use cellfun when you're working with cells, and arrayfun when you are working with other "stuff".

Since cell_blocks is a cell array, you can use cellfun:

all(cellfun(@(x) isequal(unique(x),values.'), cell_blocks))




Simplifying the disp-calls:

You know that the first number in the sequence is 1, so you can simplify the two disp-calls in the middle:

disp(['Numbers 1-' num2str(rows) ' are present in all rows and columns'])




I believe you're missing a break after checking the size of the board (first if).



Comments!

I suggest you use a lot more comments! Explain what the different parts of your code do.