La diferencia de tamaño viene dada porque en el primer ejemplo los datos del título y texto van en una sección nueva (.data) que no existe en el segundo ejemplo, que lo incluye directamente en el código.
Eso quiere decir que si los desensamblas verás:
Código del primer ejemplo:
00401000 <>/$  6A 00                    PUSH 0                                  ; /Style = MB_OK|MB_APPLMODAL
00401002   |.  68 0B304000              PUSH 0040300B                           ; |Title = "Titulo"
00401007   |.  68 00304000              PUSH 00403000                           ; |Text = "Hola mundo"
0040100C   |.  6A 00                    PUSH 0                                  ; |hOwner = NULL
0040100E   |.  E8 07000000              CALL <JMP.&user32.MessageBoxA>          ; \MessageBoxA
00401013   |.  6A 00                    PUSH 0                                  ; /ExitCode = 0
00401015   \.  E8 06000000              CALL <JMP.&kernel32.ExitProcess>        ; \ExitProcess
0040101A    $- FF25 08204000            JMP [<&user32.MessageBoxA>]             ;  user32.MessageBoxA
00401020    .- FF25 00204000            JMP [<&kernel32.ExitProcess>]           ;  kernel32.ExitProcess
y sus secciones:
Memory map
Address    Size       Owner                          Section      Contains                    Type              Access         Initial   Mapped as
00400000   00001000   Normal   00400000 (itself)                  PE header                   Imag 01001002     R              RWE
00401000   00001000   Normal   00400000              .text        code                        Imag 01001002     R              RWE
00402000   00001000   Normal   00400000              .rdata       imports                     Imag 01001002     R              RWE
00403000   00001000   Normal   00400000              .data        data                        Imag 01001002     R              RWE
Código del segundo ejemplo (mínimo):
00401000 <>/$ /EB 12                    JMP SHORT 00401014
00401002   |. |48 6F 6C 61 20 6D 75 6E >ASCII "Hola mundo",0
0040100D   |. |54 69 74 75 6C 6F 00     ASCII "Titulo",0
00401014   |> \6A 00                    PUSH 0                                  ; /Style = MB_OK|MB_APPLMODAL
00401016   |.  68 0D104000              PUSH 0040100D                           ; |Title = "Titulo"
0040101B   |.  68 02104000              PUSH 00401002                           ; |Text = "Hola mundo"
00401020   |.  6A 00                    PUSH 0                                  ; |hOwner = NULL
00401022   |.  E8 07000000              CALL <JMP.&user32.MessageBoxA>          ; \MessageBoxA
00401027   |.  6A 00                    PUSH 0                                  ; /ExitCode = 0
00401029   \.  E8 06000000              CALL <JMP.&kernel32.ExitProcess>        ; \ExitProcess
0040102E    $- FF25 08204000            JMP [<&user32.MessageBoxA>]             ;  user32.MessageBoxA
00401034    .- FF25 00204000            JMP [<&kernel32.ExitProcess>]           ;  kernel32.ExitProcess
y sus secciones:
Memory map
Address    Size       Owner                          Section      Contains                    Type              Access         Initial   Mapped as
00400000   00001000   Minimo   00400000 (itself)                  PE header                   Imag 01001002     R              RWE
00401000   00001000   Minimo   00400000              .text        code                        Imag 01001002     R              RWE
00402000   00001000   Minimo   00400000              .rdata       data,imports                Imag 01001002     R              RWE
El tamaño de las secciones se puede definir en la compilación, pero para el MASM por defecto es de 1 kb por sección, y ese es el tamaño que ganas entre ambos códigos.
Con respecto al "@F" es una de las palabras reservadas del MASM que hace referencia a la siguiente etiqueta (para los saltos) y existe otra "@B" para saltar a la etiqueta anterior.