Precedence. The first is parsed as (($x = $i), next), the latter as (print("Next", next)). In the latter, next is evaluated before the print.
Why? Do not assume Perl is made to be used by idiots, with warnings and flashing lights at any corner. Warning are more "uhm, hey, you know, this construct you are using, it may not do what you expect it to do". That's not the case in your second example. It can only mean one thing. But feel free to submit a patch that makes this warnable. (Remember: the golden rule of "why isn't X in Perl?" is "because you haven't written a patch to add it yet")
Any two expressions can be separated by commas. See the perlop manual page.